diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index 1c9c3125..f25074c6 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -6,7 +6,7 @@ on: tags: - 'v*' pull_request: - branches: [boojum-integration] + branches: [main] workflow_dispatch: jobs: @@ -16,10 +16,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Install rust + - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: nightly-2023-07-21 + toolchain: nightly-2023-07-23 components: rustfmt, clippy - uses: actions/setup-node@v3 @@ -44,7 +44,7 @@ jobs: - name: Install Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: nightly-2023-07-21 + toolchain: nightly-2023-07-23 - name: Build Code run: make all diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index ff457b80..2a4eef9d 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -29,14 +29,22 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-21 - name: Setup Pages uses: actions/configure-pages@v3 + - name: Install mdbook run: cargo install mdbook + - name: Generate rust docs run: | echo "Generating docs..." cargo doc --no-deps + - name: Make index.html run: echo ' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 769804eb..67154c52 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -44,13 +44,14 @@ jobs: steps: - name: Checkout sources uses: actions/checkout@v3 - - name: Set version of nightly Rust - run: rustup default nightly-2023-07-21 + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-21 - name: Install target run: rustup target add ${{ matrix.arch }} - - uses: Swatinem/rust-cache@v2 - with: - cache-on-failure: false + - name: Run cargo clean run: cargo clean diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 540d52f8..c4517290 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -2,18 +2,19 @@ name: run on: push: - branches: [boojum-integration] + branches: [main] tags: - 'v*' pull_request: - branches: [boojum-integration] + branches: [main] workflow_dispatch: + jobs: test: name: unit-tests strategy: matrix: - platform: [ubuntu-latest, macos-latest] + platform: [macos-latest, ubuntu-22.04-github-hosted-16core] runs-on: ${{ matrix.platform }} steps: @@ -30,3 +31,31 @@ jobs: - name: Run tests run: cargo nextest run + + smoke-test: + name: smoke-test + runs-on: ubuntu-22.04-github-hosted-16core + env: + TEST_REPO_DIR: test-repo + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + path: ${{ env.TEST_REPO_DIR }} + ref: ${{ github.event.pull_request.head.sha }} + + - name: Install Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: nightly-2023-07-23 + + - name: Run smoke-test + env: + TEST_REPO: ${{ github.event.repository.name }} + TEST_REPO_DIR: "../${{ env.TEST_REPO_DIR }}" + RUST_BACKTRACE: full + run: | + git clone https://github.com/matter-labs/zkfoundry-smoke-test + cd zkfoundry-smoke-test + ./smoke-test.sh diff --git a/.vscode/launch.json b/.vscode/launch.json index 134bcd4a..e613f305 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -44,7 +44,7 @@ "ZKSYNC_HOME": "${workspaceFolder}" }, "args": [ - "--dev-use-local-contracts", + "--dev-system-contracts=local", "run" ], "preLaunchTask": "rebuild-contracts", diff --git a/Cargo.lock b/Cargo.lock index e9a9ed64..1b9627aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,13 +19,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8" dependencies = [ "bitflags 1.3.2", - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-sink", "memchr", "pin-project-lite", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", ] @@ -46,19 +46,19 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.3.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74" +checksum = "a92ef85799cba03f76e4f7c10f533e66d87c9a7e7055f3391f09000ad8351bc9" dependencies = [ "actix-codec", "actix-rt", "actix-service", "actix-utils", - "ahash 0.8.3", - "base64 0.21.2", - "bitflags 1.3.2", + "ahash 0.8.6", + "base64 0.21.5", + "bitflags 2.4.1", "brotli", - "bytes 1.4.0", + "bytes 1.5.0", "bytestring", "derive_more", "encoding_rs", @@ -78,7 +78,7 @@ dependencies = [ "sha1", "smallvec", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", "zstd 0.12.4", ] @@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -108,9 +108,9 @@ dependencies = [ [[package]] name = "actix-rt" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" +checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" dependencies = [ "actix-macros", "futures-core", @@ -119,18 +119,17 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327" +checksum = "3eb13e7eef0423ea6eab0e59f6c72e7cb46d33691ad56a726b3cd07ddec2c2d4" dependencies = [ "actix-rt", "actix-service", "actix-utils", "futures-core", "futures-util", - "mio 0.8.8", - "num_cpus", - "socket2 0.4.9", + "mio 0.8.9", + "socket2 0.5.5", "tokio", "tracing", ] @@ -158,9 +157,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.3.1" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96" +checksum = "0e4a5b5e29603ca8c94a77c65cf874718ceb60292c5a5c3e5f4ace041af462b9" dependencies = [ "actix-codec", "actix-http", @@ -171,8 +170,8 @@ dependencies = [ "actix-service", "actix-utils", "actix-web-codegen", - "ahash 0.7.6", - "bytes 1.4.0", + "ahash 0.8.6", + "bytes 1.5.0", "bytestring", "cfg-if 1.0.0", "cookie", @@ -180,7 +179,6 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "http", "itoa", "language-tags", "log", @@ -192,21 +190,21 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.4.9", + "socket2 0.5.5", "time", "url", ] [[package]] name = "actix-web-codegen" -version = "4.2.0" +version = "4.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9" +checksum = "eb1f50ebbb30eca122b188319a4398b3f7bb4a8cdf50ecfb73bfc6a3c3ce54f5" dependencies = [ "actix-router", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] @@ -222,9 +220,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -235,6 +233,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array 0.14.7", +] + [[package]] name = "aes" version = "0.6.0" @@ -269,6 +277,20 @@ dependencies = [ "ctr 0.6.0", ] +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes 0.8.3", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash", + "subtle", +] + [[package]] name = "aes-soft" version = "0.6.4" @@ -291,32 +313,33 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.0.4" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -362,30 +385,29 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" dependencies = [ "utf8parse", ] @@ -396,17 +418,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.2" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c677ab05e09154296dd37acecd46420c17b9713e8366facafa8fc0885167cf4c" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -474,9 +496,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.1" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6" +checksum = "bc2d0cfb2a7388d34f590e76686704c494ed7aaceed62ee1ba35cbf363abc2a5" dependencies = [ "brotli", "flate2", @@ -484,8 +506,8 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "zstd 0.12.4", - "zstd-safe 6.0.6", + "zstd 0.13.0", + "zstd-safe 7.0.0", ] [[package]] @@ -514,20 +536,20 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -536,7 +558,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "pharos", "rustc_version", ] @@ -568,7 +590,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -597,7 +619,7 @@ dependencies = [ "async-trait", "axum-core", "bitflags 1.3.2", - "bytes 1.4.0", + "bytes 1.5.0", "futures-util", "http", "http-body", @@ -626,7 +648,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" dependencies = [ "async-trait", - "bytes 1.4.0", + "bytes 1.5.0", "futures-util", "http", "http-body", @@ -650,9 +672,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -683,9 +705,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64ct" @@ -711,7 +733,7 @@ dependencies = [ [[package]] name = "bellman_ce" version = "0.3.2" -source = "git+https://github.com/matter-labs/bellman?branch=dev#bbac0559fdc440b2331eca1c347a30559a3dd969" +source = "git+https://github.com/matter-labs/bellman?branch=dev#5520aa2274afe73d281373c92b007a2ecdebfbea" dependencies = [ "arrayvec 0.7.4", "bit-vec", @@ -720,7 +742,7 @@ dependencies = [ "byteorder", "cfg-if 1.0.0", "crossbeam 0.7.3", - "futures 0.3.28", + "futures 0.3.29", "hex", "lazy_static", "num_cpus", @@ -734,7 +756,7 @@ dependencies = [ [[package]] name = "bellman_ce" version = "0.3.2" -source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#1f05c528c392ea9eadb99b22431659c113bc0af4" +source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#e01e5fa08a97a113e76ec8a69d06fe6cc2c82d17" dependencies = [ "arrayvec 0.7.4", "bit-vec", @@ -743,7 +765,7 @@ dependencies = [ "byteorder", "cfg-if 1.0.0", "crossbeam 0.7.3", - "futures 0.3.28", + "futures 0.3.29", "hex", "lazy_static", "num_cpus", @@ -788,12 +810,12 @@ dependencies = [ "lazycell", "peeking_take_while", "prettyplease", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "regex", "rustc-hash", "shlex", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -822,9 +844,18 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bitmaps" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] [[package]] name = "bitvec" @@ -870,6 +901,14 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e#1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "blake2-rfc_bellman_edition" version = "0.0.1" @@ -884,7 +923,7 @@ dependencies = [ [[package]] name = "blake2s_const" version = "0.6.0" -source = "git+https://github.com/matter-labs/bellman?branch=dev#bbac0559fdc440b2331eca1c347a30559a3dd969" +source = "git+https://github.com/matter-labs/bellman?branch=dev#5520aa2274afe73d281373c92b007a2ecdebfbea" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -894,7 +933,7 @@ dependencies = [ [[package]] name = "blake2s_const" version = "0.6.0" -source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#1f05c528c392ea9eadb99b22431659c113bc0af4" +source = "git+https://github.com/matter-labs/bellman?branch=snark-wrapper#e01e5fa08a97a113e76ec8a69d06fe6cc2c82d17" dependencies = [ "arrayref", "arrayvec 0.5.2", @@ -968,18 +1007,30 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + [[package]] name = "boojum" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#2771569baab9a59690d88cee6ba9b295c8a1e4c4" +source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#1588de7669b016df3f81f7139a1a4b131840e48b" dependencies = [ "arrayvec 0.7.4", "bincode", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "const_format", "convert_case 0.6.0", "crossbeam 0.8.2", - "crypto-bigint 0.5.3", + "crypto-bigint 0.5.5", "cs_derive 0.1.0 (git+https://github.com/matter-labs/era-boojum.git?branch=main)", "derivative", "ethereum-types 0.14.1", @@ -993,7 +1044,7 @@ dependencies = [ "rand 0.8.5", "rayon", "serde", - "sha2 0.10.6", + "sha2 0.10.8", "sha3 0.10.6", "smallvec", "unroll", @@ -1001,9 +1052,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.3.4" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1012,9 +1063,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.4" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -1026,7 +1077,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ - "sha2 0.10.6", + "sha2 0.10.8", "tinyvec", ] @@ -1043,9 +1094,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.6.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", "serde", @@ -1053,9 +1104,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -1071,15 +1122,15 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytecount" -version = "0.6.3" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" +checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -1093,20 +1144,20 @@ dependencies = [ [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] [[package]] name = "bytestring" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae" +checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", ] [[package]] @@ -1141,9 +1192,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" dependencies = [ "serde", ] @@ -1163,9 +1214,9 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", @@ -1206,6 +1257,30 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if 1.0.0", + "cipher 0.4.4", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher 0.4.4", + "poly1305", + "zeroize", +] + [[package]] name = "chrono" version = "0.4.31" @@ -1218,7 +1293,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -1238,17 +1313,17 @@ checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "circuit_definitions" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#3cd647aa57fc2e1180bab53f7a3b61ec47502a46" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#d2e3670e0c5115b7cc7cc24e6d3dbdd17a214aad" dependencies = [ "crossbeam 0.8.2", "derivative", - "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", - "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", + "seq-macro", "serde", "snark_wrapper", "zk_evm 1.4.0", @@ -1291,20 +1366,19 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.23" +version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03aef18ddf7d879c15ce20f04826ef8418101c7e528014c3eeea13321047dca3" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.23" +version = "4.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ce6fffb678c9b80a70b6b6de0aad31df727623a70fd9a842c30cd573e2fa98" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" dependencies = [ "anstream", "anstyle", @@ -1314,21 +1388,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.3.12" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "cloudabi" @@ -1342,7 +1416,7 @@ dependencies = [ [[package]] name = "codegen" version = "0.1.0" -source = "git+https://github.com/matter-labs/solidity_plonk_verifier.git?branch=dev#07954802c13fb087efb5874c2ce521f843d614fd" +source = "git+https://github.com/matter-labs/solidity_plonk_verifier.git?branch=dev#82f96b7156551087f1c9bfe4f0ea68845b6debfc" dependencies = [ "ethereum-types 0.14.1", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", @@ -1374,9 +1448,9 @@ dependencies = [ "coins-core", "digest 0.10.7", "hmac 0.12.1", - "k256 0.13.1", + "k256 0.13.2", "serde", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", ] @@ -1392,7 +1466,7 @@ dependencies = [ "once_cell", "pbkdf2 0.12.2", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", ] @@ -1402,7 +1476,7 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "bech32", "bs58", "digest 0.10.7", @@ -1411,8 +1485,8 @@ dependencies = [ "ripemd", "serde", "serde_derive", - "sha2 0.10.6", - "sha3 0.10.6", + "sha2 0.10.8", + "sha3 0.10.8", "thiserror", ] @@ -1430,7 +1504,7 @@ checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6" dependencies = [ "is-terminal", "lazy_static", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -1439,19 +1513,20 @@ version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "memchr", ] [[package]] name = "const-hex" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c37be52ef5e3b394db27a2341010685ad5103c72ac15ce2e9420a7e8f93f342c" +checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" dependencies = [ "cfg-if 1.0.0", "cpufeatures", "hex", + "proptest", "serde", ] @@ -1469,20 +1544,20 @@ checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" [[package]] name = "const_format" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.31" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-xid 0.2.4", ] @@ -1537,9 +1612,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1737,9 +1812,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", "rand_core 0.6.4", @@ -1754,6 +1829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array 0.14.7", + "rand_core 0.6.4", "typenum", ] @@ -1780,10 +1856,10 @@ dependencies = [ [[package]] name = "cs_derive" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#2771569baab9a59690d88cee6ba9b295c8a1e4c4" +source = "git+https://github.com/matter-labs/era-boojum.git?branch=main#1588de7669b016df3f81f7139a1a4b131840e48b" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -1791,10 +1867,10 @@ dependencies = [ [[package]] name = "cs_derive" version = "0.1.0" -source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#e819d15b107a06a746299f98bbd9802e26eeb348" +source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#ed8ab8984cae05d00d9d62196753c8d40df47c7d" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "syn 1.0.109", @@ -1820,12 +1896,40 @@ dependencies = [ [[package]] name = "ctrlc" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e" +checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf" dependencies = [ "nix", - "windows-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", ] [[package]] @@ -1846,7 +1950,7 @@ checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "strsim 0.10.0", "syn 1.0.109", @@ -1865,22 +1969,22 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.5.1" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd72493923899c6f10c641bdbdeddc7183d6396641d99c1a0d1597f37f92e28" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.14.2", + "hashbrown 0.14.3", "lock_api", "once_cell", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "debugid" @@ -1889,7 +1993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ "serde", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -1925,10 +2029,11 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" dependencies = [ + "powerfmt", "serde", ] @@ -1938,7 +2043,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -1950,12 +2055,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case 0.4.0", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustc_version", "syn 1.0.109", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.8.1" @@ -2034,7 +2145,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -2080,16 +2191,41 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der 0.7.8", "digest 0.10.7", - "elliptic-curve 0.13.6", + "elliptic-curve 0.13.8", "rfc6979 0.4.0", - "signature 2.1.0", - "spki 0.7.2", + "signature 2.2.0", + "spki 0.7.3", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8 0.10.2", + "signature 2.2.0", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core 0.6.4", + "serde", + "sha2 0.10.8", + "subtle", + "zeroize", ] [[package]] @@ -2123,12 +2259,12 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.6" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct 0.2.0", - "crypto-bigint 0.5.3", + "crypto-bigint 0.5.5", "digest 0.10.7", "ff 0.13.0", "generic-array 0.14.7", @@ -2160,9 +2296,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if 1.0.0", ] @@ -2173,15 +2309,15 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "hex", - "k256 0.13.1", + "k256 0.13.2", "log", "rand 0.8.5", "rlp", "serde", - "sha3 0.10.6", + "sha3 0.10.8", "zeroize", ] @@ -2200,9 +2336,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" dependencies = [ "humantime", "is-terminal", @@ -2228,20 +2364,20 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "era_test_node" -version = "0.1.0-alpha.5" +version = "0.1.0-alpha.12" dependencies = [ "anyhow", "bigdecimal", "chrono", - "clap 4.3.23", + "clap 4.4.10", "colored", "ethabi 16.0.0", "ethers", "eyre", - "futures 0.3.28", + "futures 0.3.29", "hex", "httptest", - "indexmap 2.0.2", + "indexmap 2.1.0", "itertools 0.10.5", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-core-client", @@ -2249,17 +2385,19 @@ dependencies = [ "jsonrpc-http-server", "lazy_static", "maplit", + "multivm", "once_cell", "openssl-sys", "reqwest", "rustc-hash", "serde", "serde_json", + "sha3 0.10.8", "tempdir", + "time", "tokio", "tracing", "tracing-subscriber", - "vm", "zksync-web3-rs", "zksync_basic_types", "zksync_contracts", @@ -2272,23 +2410,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -2316,8 +2443,8 @@ dependencies = [ "scrypt 0.10.0", "serde", "serde_json", - "sha2 0.10.6", - "sha3 0.10.6", + "sha2 0.10.8", + "sha3 0.10.8", "thiserror", "uuid 0.8.2", ] @@ -2349,7 +2476,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha3 0.10.6", + "sha3 0.10.8", "thiserror", "uint", ] @@ -2407,16 +2534,16 @@ dependencies = [ "impl-codec 0.6.0", "impl-rlp", "impl-serde 0.4.0", - "primitive-types 0.12.1", + "primitive-types 0.12.2", "scale-info", "uint", ] [[package]] name = "ethers" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b4026b97da8281276744741fac7eb385da905f6093c583331fa2953fdd4253" +checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -2430,9 +2557,9 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e9e8acd0ed348403cc73a670c24daba3226c40b98dc1a41903766b3ab6240a" +checksum = "8c405f24ea3a517899ba7985385c43dc4a7eb1209af3b1e0a1a32d7dcc7f8d09" dependencies = [ "ethers-core", "once_cell", @@ -2442,9 +2569,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" +checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" dependencies = [ "const-hex", "ethers-contract-abigen", @@ -2461,9 +2588,9 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce95a43c939b2e4e2f3191c5ad4a1f279780b8a39139c9905b43a7433531e2ab" +checksum = "51258120c6b47ea9d9bec0d90f9e8af71c977fbefbef8213c91bfed385fe45eb" dependencies = [ "Inflector", "const-hex", @@ -2472,49 +2599,49 @@ dependencies = [ "ethers-etherscan", "eyre", "prettyplease", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "regex", "reqwest", "serde", "serde_json", - "syn 2.0.29", - "toml 0.7.8", + "syn 2.0.39", + "toml 0.8.8", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9ce44906fc871b3ee8c69a695ca7ec7f70e50cb379c9b9cb5e532269e492f6" +checksum = "936e7a0f1197cee2b62dc89f63eff3201dbf87c283ff7e18d86d38f83b845483" dependencies = [ "Inflector", "const-hex", "ethers-contract-abigen", "ethers-core", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde_json", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "ethers-core" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +checksum = "2f03e0bdc216eeb9e355b90cf610ef6c5bb8aca631f97b5ae9980ce34ea7878d" dependencies = [ "arrayvec 0.7.4", - "bytes 1.4.0", - "cargo_metadata 0.17.0", + "bytes 1.5.0", + "cargo_metadata 0.18.1", "chrono", "const-hex", - "elliptic-curve 0.13.6", + "elliptic-curve 0.13.8", "ethabi 18.0.0", "generic-array 0.14.7", - "k256 0.13.1", - "num_enum 0.7.0", + "k256 0.13.2", + "num_enum 0.7.1", "once_cell", "open-fastrlp", "rand 0.8.5", @@ -2522,7 +2649,7 @@ dependencies = [ "serde", "serde_json", "strum 0.25.0", - "syn 2.0.29", + "syn 2.0.39", "tempfile", "thiserror", "tiny-keccak 2.0.2", @@ -2531,10 +2658,11 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e53451ea4a8128fbce33966da71132cf9e1040dcfd2a2084fd7733ada7b2045" +checksum = "abbac2c890bdbe0f1b8e549a53b00e2c4c1de86bb077c1094d1f38cdf9381a56" dependencies = [ + "chrono", "ethers-core", "reqwest", "semver", @@ -2546,9 +2674,9 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c339aad74ae5c451d27e0e49c7a3c7d22620b119b4f9291d7aa21f72d7f366" +checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" dependencies = [ "async-trait", "auto_impl", @@ -2573,14 +2701,14 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" +checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "const-hex", "enr", "ethers-core", @@ -2610,28 +2738,28 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.8" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4864d387456a9c09a1157fa10e1528b29d90f1d859443acf06a1b23365fb518c" +checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" dependencies = [ "async-trait", "coins-bip32", "coins-bip39", - "elliptic-curve 0.13.6", + "const-hex", + "elliptic-curve 0.13.8", "eth-keystore", "ethers-core", - "hex", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "tracing", ] [[package]] name = "ethers-solc" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de34e484e7ae3cab99fbfd013d6c5dc7f9013676a4e0e414d8b12e1213e8b3ba" +checksum = "a64f710586d147864cff66540a6d64518b9ff37d73ef827fee430538265b595f" dependencies = [ "cfg-if 1.0.0", "const-hex", @@ -2667,9 +2795,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "80f656be11ddf91bd709454d15d5bd896fbaf4cc3314e69349e4d1569f5b46cd" dependencies = [ "indenter", "once_cell", @@ -2692,9 +2820,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "ff" @@ -2735,15 +2863,21 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b96fbccd88dbb1fac4ee4a07c2fcc4ca719a74ffbd9d2b9d41d8c8eb073d8b20" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "syn 1.0.109", ] +[[package]] +name = "fiat-crypto" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" + [[package]] name = "findshlibs" version = "0.10.2" @@ -2756,6 +2890,12 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "finl_unicode" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6" + [[package]] name = "firestorm" version = "0.5.1" @@ -2794,9 +2934,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -2825,9 +2965,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2835,7 +2975,7 @@ dependencies = [ [[package]] name = "franklin-crypto" version = "0.0.5" -source = "git+https://github.com/matter-labs/franklin-crypto?branch=dev#a5e55f5fc6e718e8ab2e727ce21c0fa599eaf79b" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=dev#5695d07c7bc604c2c39a27712ffac171d39ee1ed" dependencies = [ "arr_macro", "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=dev)", @@ -2849,7 +2989,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "lazy_static", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.2.5", "num-integer", "num-traits", @@ -2865,7 +3005,7 @@ dependencies = [ [[package]] name = "franklin-crypto" version = "0.0.5" -source = "git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper#b1f1677d9ece6a6ddcfbf394dc2db2bd8b792e6c" +source = "git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper#a9e29acd73245bd3b670b62b4d481ece06d43803" dependencies = [ "arr_macro", "bellman_ce 0.3.2 (git+https://github.com/matter-labs/bellman?branch=snark-wrapper)", @@ -2881,7 +3021,7 @@ dependencies = [ "indexmap 1.9.3", "itertools 0.10.5", "lazy_static", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.2.5", "num-integer", "num-traits", @@ -2946,9 +3086,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" dependencies = [ "futures-channel", "futures-core", @@ -2961,9 +3101,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" dependencies = [ "futures-core", "futures-sink", @@ -2971,15 +3111,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" dependencies = [ "futures-core", "futures-task", @@ -3000,9 +3140,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-locks" @@ -3016,26 +3156,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-timer" @@ -3049,9 +3189,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures 0.1.31", "futures-channel", @@ -3108,20 +3248,30 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if 1.0.0", "libc", "wasi 0.11.0+wasi-snapshot-preview1", ] +[[package]] +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" +dependencies = [ + "opaque-debug 0.3.0", + "polyval", +] + [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" @@ -3131,15 +3281,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", - "bstr 1.6.2", - "fnv", + "bstr 1.8.0", "log", - "regex", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -3195,7 +3345,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f40175857d0b8d7b6cad6cd9594284da5041387fa2ddff30ab6d8faef65eb" dependencies = [ "async-trait", - "base64 0.21.2", + "base64 0.21.5", "google-cloud-metadata", "google-cloud-token", "home", @@ -3228,8 +3378,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "215abab97e07d144428425509c1dad07e57ea72b84b21bcdb6a8a5f12a5c4932" dependencies = [ "async-stream", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "futures-util", "google-cloud-auth", "google-cloud-metadata", @@ -3239,11 +3389,11 @@ dependencies = [ "percent-encoding", "regex", "reqwest", - "ring", + "ring 0.16.20", "rsa", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "time", "tokio", @@ -3253,9 +3403,9 @@ dependencies = [ [[package]] name = "google-cloud-token" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcd62eb34e3de2f085bcc33a09c3e17c4f65650f36d53eb328b00d63bcb536a" +checksum = "8f49c12ba8b21d128a2ce8585955246977fbce4415f680ebf9199b6f9d6d725f" dependencies = [ "async-trait", ] @@ -3267,7 +3417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19775995ee20209163239355bc3ad2f33f83da35d9ef72dea26e5af753552c87" dependencies = [ "dashmap", - "futures 0.3.28", + "futures 0.3.29", "futures-timer", "no-std-compat", "nonzero_ext", @@ -3301,28 +3451,28 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.21" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "fnv", "futures-core", "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap 2.1.0", "slab", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", ] [[package]] name = "handlebars" -version = "4.3.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -3338,7 +3488,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", ] [[package]] @@ -3353,14 +3503,14 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", ] [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "hashers" @@ -3382,9 +3532,9 @@ dependencies = [ [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ "byteorder", "num-traits", @@ -3392,13 +3542,12 @@ dependencies = [ [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags 1.3.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "headers-core", "http", "httpdate", @@ -3444,9 +3593,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "hex" @@ -3488,7 +3637,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -3504,11 +3653,11 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "fnv", "itoa", ] @@ -3519,7 +3668,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "http", "pin-project-lite", ] @@ -3544,15 +3693,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "httptest" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f25cfb6def593d43fae1ead24861f217e93bc70768a45cc149a69b5f049df4" +checksum = "c8b44a11846bda8c9fe9194f9924db7132c34635c7ce020f180f6c5d46d2308f" dependencies = [ "bstr 0.2.17", - "bytes 1.4.0", + "bytes 1.5.0", "crossbeam-channel 0.5.8", "form_urlencoded", - "futures 0.3.28", + "futures 0.3.29", "http", "hyper", "log", @@ -3576,7 +3725,7 @@ version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-channel", "futures-core", "futures-util", @@ -3587,7 +3736,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -3596,9 +3745,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http", @@ -3616,7 +3765,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "hyper", "native-tls", "tokio", @@ -3625,16 +3774,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -3662,6 +3811,30 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + [[package]] name = "impl-codec" version = "0.5.1" @@ -3677,7 +3850,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "parity-scale-codec 3.6.4", + "parity-scale-codec 3.6.9", ] [[package]] @@ -3713,7 +3886,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -3736,12 +3909,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.14.3", ] [[package]] @@ -3773,9 +3946,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "ipnetwork" @@ -3799,9 +3972,9 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -3830,18 +4003,18 @@ checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -3852,7 +4025,7 @@ version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ "derive_more", - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-pubsub", "log", @@ -3866,7 +4039,7 @@ version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "futures-executor", "futures-util", "log", @@ -3880,7 +4053,7 @@ name = "jsonrpc-core" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "futures-executor", "futures-util", "log", @@ -3894,7 +4067,7 @@ name = "jsonrpc-core-client" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-client-transports", ] @@ -3904,7 +4077,7 @@ version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ "proc-macro-crate 0.1.5", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -3914,7 +4087,7 @@ name = "jsonrpc-http-server" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "hyper", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-server-utils", @@ -3929,7 +4102,7 @@ name = "jsonrpc-pubsub" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "lazy_static", "log", @@ -3943,8 +4116,8 @@ name = "jsonrpc-server-utils" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "bytes 1.4.0", - "futures 0.3.28", + "bytes 1.5.0", + "futures 0.3.29", "globset", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "lazy_static", @@ -3960,7 +4133,7 @@ name = "jsonrpc-ws-server" version = "18.0.0" source = "git+https://github.com/matter-labs/jsonrpc.git?branch=master#12c53e3e20c09c2fb9966a4ef1b0ea63de172540" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "jsonrpc-core 18.0.0 (git+https://github.com/matter-labs/jsonrpc.git?branch=master)", "jsonrpc-server-utils", "log", @@ -4003,7 +4176,7 @@ dependencies = [ "thiserror", "tokio", "tokio-rustls", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tracing", "webpki-roots 0.24.0", ] @@ -4063,7 +4236,7 @@ checksum = "21dc12b1d4f16a86e8c522823c4fab219c88c03eb7c924ec0501a64bf12e058b" dependencies = [ "heck 0.4.1", "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -4083,7 +4256,7 @@ dependencies = [ "soketto", "tokio", "tokio-stream", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower", "tracing", ] @@ -4131,9 +4304,9 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "pem", - "ring", + "ring 0.16.20", "serde", "serde_json", "simple_asn1", @@ -4148,21 +4321,21 @@ dependencies = [ "cfg-if 1.0.0", "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "k256" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b" dependencies = [ "cfg-if 1.0.0", - "ecdsa 0.16.8", - "elliptic-curve 0.13.6", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", "once_cell", - "sha2 0.10.6", - "signature 2.1.0", + "sha2 0.10.8", + "signature 2.2.0", ] [[package]] @@ -4186,18 +4359,20 @@ dependencies = [ [[package]] name = "lalrpop" -version = "0.20.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83be602e051ada38d90c7841092adabeb585197afe9dabb20e4f8375cc87846e" +checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", "bit-set", + "diff", "ena", - "itertools 0.11.0", + "is-terminal", + "itertools 0.10.5", "lalrpop-util", "petgraph", "regex", - "regex-syntax 0.7.4", + "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak 2.0.2", @@ -4206,9 +4381,9 @@ dependencies = [ [[package]] name = "lalrpop-util" -version = "0.20.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "365d88f9d803538a06641e6736f21d95ecf9226dc1693421212e62c405cdd199" +checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" [[package]] name = "language-tags" @@ -4222,7 +4397,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ - "spin", + "spin 0.5.2", ] [[package]] @@ -4239,9 +4414,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -4255,9 +4430,20 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "librocksdb-sys" @@ -4286,53 +4472,52 @@ dependencies = [ [[package]] name = "linkme" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f948366ad5bb46b5514ba7a7a80643726eef08b06632592699676748c8bc33b" +checksum = "91ed2ee9464ff9707af8e9ad834cffa4802f072caad90639c583dd3c62e6e608" dependencies = [ "linkme-impl", ] [[package]] name = "linkme-impl" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc28438cad73dcc90ff3466fc329a9252b1b8ba668eb0d5668ba97088cf4eef0" +checksum = "ba125974b109d512fccbc6c0244e7580143e460895dfd6ea7f8bbb692fd94396" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "linux-raw-sys" -version = "0.4.5" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829" [[package]] name = "local-channel" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" dependencies = [ "futures-core", "futures-sink", - "futures-util", "local-waker", ] [[package]] name = "local-waker" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg 1.1.0", "scopeguard", @@ -4344,6 +4529,38 @@ version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +[[package]] +name = "logos" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" +dependencies = [ + "beef", + "fnv", + "proc-macro2 1.0.70", + "quote 1.0.33", + "regex-syntax 0.6.29", + "syn 2.0.39", +] + +[[package]] +name = "logos-derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" +dependencies = [ + "logos-codegen", +] + [[package]] name = "mach" version = "0.3.2" @@ -4385,9 +4602,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "maybe-uninit" @@ -4397,18 +4614,19 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if 1.0.0", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.6.3" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" @@ -4434,7 +4652,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" dependencies = [ - "ahash 0.8.3", + "ahash 0.8.6", "metrics-macros", "portable-atomic", ] @@ -4445,7 +4663,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a4964177ddfdab1e3a2b37aec7cf320e14169abb0ed73999f558136409178d5" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "hyper", "indexmap 1.9.3", "ipnet", @@ -4463,9 +4681,9 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -4483,6 +4701,29 @@ dependencies = [ "sketches-ddsketch", ] +[[package]] +name = "miette" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" +dependencies = [ + "miette-derive", + "once_cell", + "thiserror", + "unicode-width", +] + +[[package]] +name = "miette-derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "mime" version = "0.3.17" @@ -4550,14 +4791,14 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -4584,19 +4825,30 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + [[package]] name = "multivm" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ - "vlog", - "vm", - "vm_1_3_2", - "vm_m5", - "vm_m6", - "vm_virtual_blocks", + "anyhow", + "hex", + "itertools 0.10.5", + "once_cell", + "thiserror", + "tracing", + "vise", + "zk_evm 1.3.1", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", + "zk_evm 1.4.0", "zksync_contracts", "zksync_state", + "zksync_system_constants", "zksync_types", "zksync_utils", ] @@ -4638,14 +4890,13 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nix" -version = "0.26.2" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "libc", - "static_assertions", ] [[package]] @@ -4706,7 +4957,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-complex 0.4.4", "num-integer", "num-iter", @@ -4728,9 +4979,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg 1.1.0", "num-integer", @@ -4791,7 +5042,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -4847,16 +5098,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg 1.1.0", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg 1.1.0", "libm", @@ -4868,7 +5119,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi 0.3.3", "libc", ] @@ -4883,11 +5134,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" dependencies = [ - "num_enum_derive 0.7.0", + "num_enum_derive 0.7.1", ] [[package]] @@ -4897,28 +5148,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "num_enum_derive" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597" +checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e" dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", ] [[package]] name = "object" -version = "0.31.1" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" dependencies = [ "memchr", ] @@ -4949,7 +5209,7 @@ checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec 0.7.4", "auto_impl", - "bytes 1.4.0", + "bytes 1.5.0", "ethereum-types 0.14.1", "open-fastrlp-derive", ] @@ -4960,19 +5220,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ - "bytes 1.4.0", - "proc-macro2 1.0.66", + "bytes 1.5.0", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] [[package]] name = "openssl" -version = "0.10.56" +version = "0.10.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if 1.0.0", "foreign-types", "libc", @@ -4987,9 +5247,9 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5000,18 +5260,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.27.0+1.1.1v" +version = "300.1.6+3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e8f197c82d7511c5b014030c9b1efeda40d7d5f99d23b4ceed3524a5e63f02" +checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.91" +version = "0.9.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" dependencies = [ "cc", "libc", @@ -5026,6 +5286,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "os_info" version = "3.7.0" @@ -5069,7 +5338,19 @@ dependencies = [ [[package]] name = "pairing_ce" version = "0.28.5" -source = "git+https://github.com/matter-labs/pairing.git#d06c2a112913b0abfb75996cc29a6b6075717e99" +source = "git+https://github.com/matter-labs/pairing.git?rev=f55393f#f55393fd366596eac792d78525d26e9c4d6ed1ca" +dependencies = [ + "byteorder", + "cfg-if 1.0.0", + "ff_ce", + "rand 0.4.6", + "serde", +] + +[[package]] +name = "pairing_ce" +version = "0.28.5" +source = "git+https://github.com/matter-labs/pairing.git#f55393fd366596eac792d78525d26e9c4d6ed1ca" dependencies = [ "byteorder", "cfg-if 1.0.0", @@ -5118,15 +5399,15 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8e946cc0cc711189c0b0249fb8b599cbeeab9784d83c415719368bb8d4ac64" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec 0.7.4", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive 3.6.4", + "parity-scale-codec-derive 3.6.9", "serde", ] @@ -5137,19 +5418,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] [[package]] name = "parity-scale-codec-derive" -version = "3.6.4" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a296c3079b5fefbc499e1de58dc26c09b1b9a5952d26694ee89f04a43ebbb3e" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro-crate 2.0.0", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -5190,7 +5471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.9", ] [[package]] @@ -5209,15 +5490,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -5284,7 +5565,7 @@ dependencies = [ "digest 0.10.7", "hmac 0.12.1", "password-hash 0.4.2", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] @@ -5323,25 +5604,26 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a" +checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853" +checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" dependencies = [ "pest", "pest_generator", @@ -5349,26 +5631,26 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929" +checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" dependencies = [ "pest", "pest_meta", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "pest_meta" -version = "2.7.2" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48" +checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] @@ -5378,7 +5660,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.2", + "indexmap 2.1.0", ] [[package]] @@ -5387,7 +5669,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ - "futures 0.3.28", + "futures 0.3.29", "rustc_version", ] @@ -5419,9 +5701,9 @@ checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ "phf_generator", "phf_shared 0.11.2", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -5457,16 +5739,16 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "pin-project-lite" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -5513,7 +5795,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der 0.7.8", - "spki 0.7.2", + "spki 0.7.3", ] [[package]] @@ -5522,11 +5804,46 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +[[package]] +name = "platforms" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + +[[package]] +name = "polyval" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "opaque-debug 0.3.0", + "universal-hash", +] + [[package]] name = "portable-atomic" -version = "1.4.2" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b" + +[[package]] +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f32154ba0af3a075eefa1eda8bb414ee928f62303a54ea85b8d6638ff1a6ee9e" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -5542,12 +5859,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64d9ba0963cdcea2e1b2230fbae2bab30eb25a174be395c41e764bfb65dd62" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ - "proc-macro2 1.0.66", - "syn 2.0.29", + "proc-macro2 1.0.70", + "syn 2.0.39", ] [[package]] @@ -5565,9 +5882,9 @@ dependencies = [ [[package]] name = "primitive-types" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash 0.8.0", "impl-codec 0.6.0", @@ -5596,6 +5913,15 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -5603,7 +5929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", "version_check", @@ -5615,7 +5941,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "version_check", ] @@ -5637,9 +5963,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -5662,23 +5988,137 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "prometheus_exporter" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "metrics", "metrics-exporter-prometheus", "tokio", + "vise", "vise-exporter", ] +[[package]] +name = "proptest" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +dependencies = [ + "bitflags 2.4.1", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift 0.3.0", + "regex-syntax 0.8.2", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes 1.5.0", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2" +dependencies = [ + "bytes 1.5.0", + "heck 0.4.1", + "itertools 0.11.0", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.39", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + +[[package]] +name = "prost-reflect" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "057237efdb71cf4b3f9396302a3d6599a92fa94063ba537b66130980ea9909f3" +dependencies = [ + "base64 0.21.5", + "logos", + "miette", + "once_cell", + "prost", + "prost-types", + "serde", + "serde-value", +] + +[[package]] +name = "prost-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e" +dependencies = [ + "prost", +] + +[[package]] +name = "protox" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00bb76c5f6221de491fe2c8f39b106330bbd9762c6511119c07940e10eb9ff11" +dependencies = [ + "bytes 1.5.0", + "miette", + "prost", + "prost-reflect", + "prost-types", + "protox-parse", + "thiserror", +] + +[[package]] +name = "protox-parse" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4581f441c58863525a3e6bec7b8de98188cf75239a56c725a3e7288450a33f" +dependencies = [ + "logos", + "miette", + "prost-types", + "thiserror", +] + [[package]] name = "pulldown-cmark" version = "0.9.3" @@ -5722,6 +6162,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + [[package]] name = "quote" version = "0.6.13" @@ -5737,7 +6186,7 @@ version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", ] [[package]] @@ -5780,7 +6229,7 @@ dependencies = [ "rand_jitter", "rand_os", "rand_pcg", - "rand_xorshift", + "rand_xorshift 0.1.1", "winapi 0.3.9", ] @@ -5868,7 +6317,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] @@ -5942,6 +6391,24 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "raw-cpuid" version = "10.7.0" @@ -5953,9 +6420,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" dependencies = [ "either", "rayon-core", @@ -5963,14 +6430,12 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" dependencies = [ - "crossbeam-channel 0.5.8", "crossbeam-deque 0.8.3", "crossbeam-utils 0.8.16", - "num_cpus", ] [[package]] @@ -5993,34 +6458,34 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.9.3" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.3.6", - "regex-syntax 0.7.4", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", ] [[package]] @@ -6034,13 +6499,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.6" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.4", + "regex-syntax 0.8.2", ] [[package]] @@ -6051,9 +6516,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "remove_dir_all" @@ -6066,12 +6537,12 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.19" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b9b67e2ca7dd9e9f9285b759de30ff538aab981abaaf7bc9bd90b84a0126c3" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "encoding_rs", "futures-core", "futures-util", @@ -6095,29 +6566,29 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.25.2", + "webpki-roots 0.25.3", "winreg", ] [[package]] name = "rescue_poseidon" version = "0.4.1" -source = "git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2#09b96e7e82dadac151d8d681f017cb6a16961801" +source = "git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2#c4a788471710bdb7aa0f59e8756b45ef93cdd2b2" dependencies = [ "addchain", "arrayvec 0.7.4", - "blake2 0.10.6", - "boojum", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder", "derivative", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", @@ -6135,11 +6606,11 @@ dependencies = [ [[package]] name = "rescue_poseidon" version = "0.4.1" -source = "git+https://github.com/matter-labs/rescue-poseidon#f611a3353e48cf42153e44d89ed90da9bc5934e8" +source = "git+https://github.com/matter-labs/rescue-poseidon#d059b5042df5ed80e151f05751410b524a54d16c" dependencies = [ "addchain", "arrayvec 0.7.4", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder", "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", "num-bigint 0.3.3", @@ -6182,12 +6653,26 @@ dependencies = [ "cc", "libc", "once_cell", - "spin", - "untrusted", + "spin 0.5.2", + "untrusted 0.7.1", "web-sys", "winapi 0.3.9", ] +[[package]] +name = "ring" +version = "0.17.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" +dependencies = [ + "cc", + "getrandom 0.2.11", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.48.0", +] + [[package]] name = "ripemd" version = "0.1.3" @@ -6214,7 +6699,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "rlp-derive", "rustc-hex", ] @@ -6225,7 +6710,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6289,25 +6774,25 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.8" +version = "0.38.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f" +checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "rustls" -version = "0.21.6" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", - "ring", + "ring 0.17.6", "rustls-webpki", "sct", ] @@ -6326,21 +6811,21 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", ] [[package]] name = "rustls-webpki" -version = "0.101.4" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -6390,7 +6875,7 @@ checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "cfg-if 1.0.0", "derive_more", - "parity-scale-codec 3.6.4", + "parity-scale-codec 3.6.9", "scale-info-derive", ] @@ -6401,7 +6886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ "proc-macro-crate 1.3.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6412,7 +6897,7 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -6446,17 +6931,17 @@ dependencies = [ "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20 0.10.2", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -6549,9 +7034,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" dependencies = [ "serde", ] @@ -6570,9 +7055,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "sentry" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b0ad16faa5d12372f914ed40d00bda21a6d1bdcc99264c5e5e1c9495cf3654" +checksum = "6ce4b57f1b521f674df7a1d200be8ff5d74e3712020ee25b553146657b5377d5" dependencies = [ "httpdate", "native-tls", @@ -6589,9 +7074,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f2ee8f147bb5f22ac59b5c35754a759b9a6f6722402e2a14750b2a63fc59bd" +checksum = "58cc8d4e04a73de8f718dc703943666d03f25d3e9e4d0fb271ca0b8c76dfa00e" dependencies = [ "backtrace", "once_cell", @@ -6601,9 +7086,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcd133362c745151eeba0ac61e3ba8350f034e9fe7509877d08059fe1d7720c6" +checksum = "6436c1bad22cdeb02179ea8ef116ffc217797c028927def303bc593d9320c0d1" dependencies = [ "hostname", "libc", @@ -6615,9 +7100,9 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7163491708804a74446642ff2c80b3acd668d4b9e9f497f85621f3d250fd012b" +checksum = "901f761681f97db3db836ef9e094acdd8756c40215326c194201941947164ef1" dependencies = [ "once_cell", "rand 0.8.5", @@ -6628,9 +7113,9 @@ dependencies = [ [[package]] name = "sentry-debug-images" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5003d7ff08aa3b2b76994080b183e8cfa06c083e280737c9cee02ca1c70f5e" +checksum = "afdb263e73d22f39946f6022ed455b7561b22ff5553aca9be3c6a047fa39c328" dependencies = [ "findshlibs", "once_cell", @@ -6639,9 +7124,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4dfe8371c9b2e126a8b64f6fefa54cef716ff2a50e63b5558a48b899265bccd" +checksum = "74fbf1c163f8b6a9d05912e1b272afa27c652e8b47ea60cb9a57ad5e481eea99" dependencies = [ "sentry-backtrace", "sentry-core", @@ -6649,9 +7134,9 @@ dependencies = [ [[package]] name = "sentry-tracing" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca8b88978677a27ee1a91beafe4052306c474c06f582321fde72d2e2cc2f7f" +checksum = "82eabcab0a047040befd44599a1da73d3adb228ff53b5ed9795ae04535577704" dependencies = [ "sentry-backtrace", "sentry-core", @@ -6661,46 +7146,62 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.31.5" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e7a88e0c1922d19b3efee12a8215f6a8a806e442e665ada71cc222cab72985f" +checksum = "da956cca56e0101998c8688bc65ce1a96f00673a0e58e663664023d4c7911e82" dependencies = [ "debugid", - "getrandom 0.2.10", "hex", + "rand 0.8.5", "serde", "serde_json", "thiserror", "time", "url", - "uuid 1.4.1", + "uuid 1.6.1", ] +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" + [[package]] name = "serde" -version = "1.0.185" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + [[package]] name = "serde_derive" -version = "1.0.185" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.105" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -6719,9 +7220,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] @@ -6756,7 +7257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" dependencies = [ "darling", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -6799,9 +7300,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -6824,8 +7325,18 @@ dependencies = [ [[package]] name = "sha2" version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=1731ced4a116d61ba9dc6ee6d0f38fb8102e357a#1731ced4a116d61ba9dc6ee6d0f38fb8102e357a" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -6847,8 +7358,17 @@ dependencies = [ [[package]] name = "sha3" version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes.git?rev=7a187e934c1f6c68e4b4e5cf37541b7a0d64d303#7a187e934c1f6c68e4b4e5cf37541b7a0d64d303" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sha3" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ "digest 0.10.7", "keccak", @@ -6856,18 +7376,18 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "signal-hook-registry" @@ -6890,9 +7410,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core 0.6.4", @@ -6904,7 +7424,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", "thiserror", "time", @@ -6916,6 +7436,16 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "skeptic" version = "0.13.7" @@ -6948,9 +7478,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.0" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" dependencies = [ "serde", ] @@ -6958,20 +7488,34 @@ dependencies = [ [[package]] name = "snark_wrapper" version = "0.1.0" -source = "git+https://github.com/matter-labs/snark-wrapper.git?branch=main#ce1453ed1d9cd25022a075ff5efb2fb387ea1ab9" +source = "git+https://github.com/matter-labs/snark-wrapper.git?branch=main#42661a9ff9d00853441589679c101f71e3785f55" dependencies = [ - "boojum", "derivative", - "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=snark_wrapper)", "rand 0.4.6", "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", ] +[[package]] +name = "snow" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e" +dependencies = [ + "aes-gcm", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", + "chacha20poly1305", + "curve25519-dalek", + "rand_core 0.6.4", + "rustc_version", + "sha2 0.10.8", + "subtle", +] + [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi 0.3.9", @@ -6979,12 +7523,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -6994,8 +7538,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ "base64 0.13.1", - "bytes 1.4.0", - "futures 0.3.28", + "bytes 1.5.0", + "futures 0.3.29", "http", "httparse", "log", @@ -7005,9 +7549,9 @@ dependencies = [ [[package]] name = "solang-parser" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb9fa2fa2fa6837be8a2495486ff92e3ffe68a99b6eeba288e139efdd842457" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" dependencies = [ "itertools 0.11.0", "lalrpop", @@ -7023,6 +7567,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.5.4" @@ -7045,9 +7595,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der 0.7.8", @@ -7086,13 +7636,13 @@ version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5" dependencies = [ - "ahash 0.7.6", + "ahash 0.7.7", "atoi", "base64 0.13.1", "bigdecimal", "bitflags 1.3.2", "byteorder", - "bytes 1.4.0", + "bytes 1.5.0", "chrono", "crc", "crossbeam-queue 0.3.8", @@ -7122,7 +7672,7 @@ dependencies = [ "serde", "serde_json", "sha-1 0.10.1", - "sha2 0.10.6", + "sha2 0.10.8", "smallvec", "sqlformat", "sqlx-rt", @@ -7144,11 +7694,11 @@ dependencies = [ "heck 0.4.1", "hex", "once_cell", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "sqlx-core", "sqlx-rt", "syn 1.0.109", @@ -7194,10 +7744,11 @@ dependencies = [ [[package]] name = "stringprep" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" +checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6" dependencies = [ + "finl_unicode", "unicode-bidi", "unicode-normalization", ] @@ -7233,7 +7784,7 @@ checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", "proc-macro-error", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "syn 1.0.109", ] @@ -7263,7 +7814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustversion", "syn 1.0.109", @@ -7276,10 +7827,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "rustversion", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7290,9 +7841,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "svm-rs" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597e3a746727984cb7ea2487b6a40726cad0dbe86628e7d429aa6b8c4c153db4" +checksum = "20689c7d03b6461b502d0b95d6c24874c7d24dea2688af80486a130a06af3b07" dependencies = [ "dirs 5.0.1", "fs2", @@ -7302,7 +7853,7 @@ dependencies = [ "semver", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.8", "thiserror", "url", "zip", @@ -7325,18 +7876,18 @@ version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.29" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", "unicode-ident", ] @@ -7344,7 +7895,7 @@ dependencies = [ [[package]] name = "sync_vm" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#e819d15b107a06a746299f98bbd9802e26eeb348" +source = "git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3#ed8ab8984cae05d00d9d62196753c8d40df47c7d" dependencies = [ "arrayvec 0.7.4", "cs_derive 0.1.0 (git+https://github.com/matter-labs/era-sync_vm.git?branch=v1.3.3)", @@ -7352,7 +7903,7 @@ dependencies = [ "franklin-crypto 0.0.5 (git+https://github.com/matter-labs/franklin-crypto?branch=dev)", "hex", "itertools 0.10.5", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-derive 0.3.3", "num-integer", "num-traits", @@ -7360,11 +7911,8 @@ dependencies = [ "rand 0.4.6", "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon)", "serde", - "sha2 0.10.6", - "sha3 0.10.6", "smallvec", - "zk_evm 1.3.3", - "zkevm_opcode_defs 1.3.2", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3)", ] [[package]] @@ -7373,6 +7921,27 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tagptr" version = "0.2.0" @@ -7397,15 +7966,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.0.0", - "redox_syscall 0.3.5", + "fastrand 2.0.1", + "redox_syscall 0.4.1", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -7421,22 +7990,22 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] [[package]] name = "test-log" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9601d162c1d77e62c1ea0bc8116cd1caf143ce3af947536c3c9052a1677fe0c" +checksum = "f66edd6b6cd810743c0c71e1d085e92b01ce6a72782032e3f794c8284fe4bcdd" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 1.0.109", + "syn 2.0.39", ] [[package]] @@ -7450,22 +8019,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7478,14 +8047,26 @@ dependencies = [ "once_cell", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" -version = "0.3.25" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", "itoa", + "libc", + "num_threads", + "powerfmt", "serde", "time-core", "time-macros", @@ -7493,15 +8074,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd" +checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" dependencies = [ "time-core", ] @@ -7541,32 +8122,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.32.0" +version = "1.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" dependencies = [ "backtrace", - "bytes 1.4.0", + "bytes 1.5.0", "libc", - "mio 0.8.8", + "mio 0.8.9", "num_cpus", "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.3", + "socket2 0.5.5", "tokio-macros", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] @@ -7612,7 +8193,7 @@ dependencies = [ "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.25.2", + "webpki-roots 0.25.3", ] [[package]] @@ -7621,7 +8202,7 @@ version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-sink", "log", @@ -7631,11 +8212,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-io", "futures-sink", @@ -7655,21 +8236,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.7.8" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.19.15", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -7691,7 +8272,29 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -7713,7 +8316,7 @@ dependencies = [ "rand 0.8.5", "slab", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower-layer", "tower-service", "tracing", @@ -7721,14 +8324,14 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ "async-compression", - "base64 0.21.2", - "bitflags 2.4.0", - "bytes 1.4.0", + "base64 0.21.5", + "bitflags 2.4.1", + "bytes 1.5.0", "futures-core", "futures-util", "http", @@ -7741,12 +8344,12 @@ dependencies = [ "percent-encoding", "pin-project-lite", "tokio", - "tokio-util 0.7.8", + "tokio-util 0.7.10", "tower", "tower-layer", "tower-service", "tracing", - "uuid 1.4.1", + "uuid 1.6.1", ] [[package]] @@ -7763,11 +8366,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if 1.0.0", "log", "pin-project-lite", "tracing-attributes", @@ -7776,20 +8378,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -7807,12 +8409,12 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] @@ -7828,9 +8430,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -7850,9 +8452,9 @@ dependencies = [ [[package]] name = "triomphe" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee8098afad3fb0c54a9007aab6804558410503ad676d4633f9c2559a00ac0f" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" [[package]] name = "try-lock" @@ -7867,7 +8469,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ "byteorder", - "bytes 1.4.0", + "bytes 1.5.0", "data-encoding", "http", "httparse", @@ -7882,9 +8484,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" @@ -7913,6 +8515,12 @@ dependencies = [ "libc", ] +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + [[package]] name = "unicase" version = "2.7.0" @@ -7930,9 +8538,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" @@ -7951,9 +8559,9 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -7973,6 +8581,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unroll" version = "0.1.5" @@ -7989,13 +8607,19 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "ureq" -version = "2.7.1" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" dependencies = [ - "base64 0.21.2", + "base64 0.21.5", "log", "native-tls", "once_cell", @@ -8004,12 +8628,12 @@ dependencies = [ [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna", + "idna 0.5.0", "percent-encoding", "serde", ] @@ -8038,17 +8662,17 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] @@ -8079,7 +8703,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vise" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ "elsa", "linkme", @@ -8091,7 +8715,7 @@ dependencies = [ [[package]] name = "vise-exporter" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ "hyper", "metrics-exporter-prometheus", @@ -8104,17 +8728,17 @@ dependencies = [ [[package]] name = "vise-macros" version = "0.1.0" -source = "git+https://github.com/matter-labs/vise.git?rev=9d097ab747b037b6e62504df1db5b975425b6bdd#9d097ab747b037b6e62504df1db5b975425b6bdd" +source = "git+https://github.com/matter-labs/vise.git?rev=dd05139b76ab0843443ab3ff730174942c825dae#dd05139b76ab0843443ab3ff730174942c825dae" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", ] [[package]] name = "vlog" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "chrono", "sentry", @@ -8124,176 +8748,72 @@ dependencies = [ ] [[package]] -name = "vm" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ - "anyhow", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vise", - "zk_evm 1.4.0", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", + "same-file", + "winapi-util", ] [[package]] -name = "vm_1_3_2" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "anyhow", - "ethabi 18.0.0", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "zk_evm 1.3.3", - "zkevm-assembly 1.3.2", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", + "try-lock", ] [[package]] -name = "vm_m5" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vlog", - "zk_evm 1.3.1", - "zksync_config", - "zksync_contracts", - "zksync_crypto", - "zksync_state", - "zksync_storage", - "zksync_types", - "zksync_utils", + "cfg-if 1.0.0", + "wasm-bindgen-macro", ] [[package]] -name = "vm_m6" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ - "hex", - "itertools 0.10.5", + "bumpalo", + "log", "once_cell", - "thiserror", - "tracing", - "vlog", - "zk_evm 1.3.1", - "zkevm-assembly 1.3.1", - "zksync_config", - "zksync_contracts", - "zksync_crypto", - "zksync_state", - "zksync_storage", - "zksync_types", - "zksync_utils", -] - -[[package]] -name = "vm_virtual_blocks" -version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" -dependencies = [ - "anyhow", - "hex", - "itertools 0.10.5", - "once_cell", - "thiserror", - "tracing", - "vise", - "zk_evm 1.3.3", - "zksync_config", - "zksync_contracts", - "zksync_state", - "zksync_types", - "zksync_utils", -] - -[[package]] -name = "walkdir" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" -dependencies = [ - "same-file", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" -dependencies = [ - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.87" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8303,9 +8823,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote 1.0.33", "wasm-bindgen-macro-support", @@ -8313,22 +8833,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ - "proc-macro2 1.0.66", + "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.29", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasm-streams" @@ -8345,9 +8865,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" dependencies = [ "js-sys", "wasm-bindgen", @@ -8360,16 +8880,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5388522c899d1e1c96a4c307e3797e0f697ba7c77dd8e0e625ecba9dd0342937" dependencies = [ "arrayvec 0.7.4", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.5", + "bytes 1.5.0", "derive_more", "ethabi 18.0.0", "ethereum-types 0.14.1", - "futures 0.3.28", + "futures 0.3.29", "futures-timer", "headers", "hex", - "idna", + "idna 0.4.0", "jsonrpc-core 18.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "log", "once_cell", @@ -8395,9 +8915,21 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] [[package]] name = "whoami" @@ -8439,9 +8971,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi 0.3.9", ] @@ -8453,12 +8985,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" +name = "windows-core" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", ] [[package]] @@ -8467,7 +8999,16 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", ] [[package]] @@ -8476,13 +9017,28 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -8491,47 +9047,89 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.5.14" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -8543,7 +9141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if 1.0.0", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -8563,7 +9161,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" dependencies = [ "async_io_stream", - "futures 0.3.28", + "futures 0.3.29", "js-sys", "log", "pharos", @@ -8596,11 +9194,45 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +[[package]] +name = "zerocopy" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] [[package]] name = "zip" @@ -8625,9 +9257,9 @@ dependencies = [ [[package]] name = "zk_evm" version = "1.3.1" -source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.1-rc0#877ba31cc1d82316fd924e8d83a9f5f1a77b1b9a" +source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.1-rc2#0a7c775932db4839ff6b7fb0db9bdb3583ab54c0" dependencies = [ - "blake2 0.10.6", + "blake2 0.10.6 (git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e)", "k256 0.11.6", "lazy_static", "num 0.4.1", @@ -8642,7 +9274,7 @@ dependencies = [ [[package]] name = "zk_evm" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3#fe8215a7047d24430ad470cf15a19bedb4d6ba0b" +source = "git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2#fbee20f5bac7d6ca3e22ae69b2077c510a07de4e" dependencies = [ "anyhow", "lazy_static", @@ -8656,8 +9288,8 @@ dependencies = [ [[package]] name = "zk_evm" -version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.4.0#e33a5ded1b53e35d261fdb46e6d16f2c900b217f" +version = "1.3.3" +source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3#fbee20f5bac7d6ca3e22ae69b2077c510a07de4e" dependencies = [ "anyhow", "lazy_static", @@ -8670,33 +9302,29 @@ dependencies = [ ] [[package]] -name = "zk_evm_abstractions" -version = "0.1.0" -source = "git+https://github.com/matter-labs/era-zk_evm_abstractions.git#7502a661d7d38906d849dcd3e7a15e5848af6581" +name = "zk_evm" +version = "1.4.0" +source = "git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.4.0#dd76fc5badf2c05278a21b38015a7798fe2fe358" dependencies = [ "anyhow", + "lazy_static", + "num 0.4.1", "serde", + "serde_json", "static_assertions", + "zk_evm_abstractions", "zkevm_opcode_defs 1.3.2", ] [[package]] -name = "zkevm-assembly" -version = "1.3.1" -source = "git+https://github.com/matter-labs/era-zkEVM-assembly.git?tag=v1.3.1-rc0#dabbb07e84dd886ee90dde2b5dde0acbf9b0123a" +name = "zk_evm_abstractions" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-zk_evm_abstractions.git#15a2af404902d5f10352e3d1fac693cc395fcff9" dependencies = [ - "env_logger 0.9.3", - "hex", - "lazy_static", - "log", - "nom", - "num-bigint 0.4.3", - "num-traits", - "sha3 0.10.6", - "smallvec", - "structopt", - "thiserror", - "zkevm_opcode_defs 1.3.1", + "anyhow", + "serde", + "static_assertions", + "zkevm_opcode_defs 1.3.2", ] [[package]] @@ -8709,9 +9337,9 @@ dependencies = [ "lazy_static", "log", "nom", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-traits", - "sha3 0.10.6", + "sha3 0.10.8", "smallvec", "structopt", "thiserror", @@ -8721,7 +9349,7 @@ dependencies = [ [[package]] name = "zkevm_circuits" version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zkevm_circuits.git?branch=main#4fba537ccecc238e2da9c80844dc8c185e42466f" +source = "git+https://github.com/matter-labs/era-zkevm_circuits.git?branch=main#fb3e2574b5c890342518fc930c145443f039a105" dependencies = [ "arrayvec 0.7.4", "bincode", @@ -8732,6 +9360,7 @@ dependencies = [ "itertools 0.10.5", "rand 0.4.6", "rand 0.8.5", + "seq-macro", "serde", "serde_json", "smallvec", @@ -8746,16 +9375,16 @@ dependencies = [ "bitflags 1.3.2", "ethereum-types 0.14.1", "lazy_static", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "zkevm_opcode_defs" version = "1.3.2" -source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs.git?branch=v1.3.2#c7ab62f4c60b27dfc690c3ab3efb5fff1ded1a25" +source = "git+https://github.com/matter-labs/era-zkevm_opcode_defs.git?branch=v1.3.2#dffacadeccdfdbff4bc124d44c595c4a6eae5013" dependencies = [ - "bitflags 2.4.0", - "blake2 0.10.6", + "bitflags 2.4.1", + "blake2 0.10.6 (git+https://github.com/RustCrypto/hashes.git?rev=1f727ce37ff40fa0cce84eb8543a45bdd3ca4a4e)", "ethereum-types 0.14.1", "k256 0.11.6", "lazy_static", @@ -8766,16 +9395,16 @@ dependencies = [ [[package]] name = "zkevm_test_harness" version = "1.3.3" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.3.3#5fe3b73dba7c98e724358428ae10723c4758dfb5" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.3.3#d52b56d6ba8196c8a3c74c4933654469e6f27a5a" dependencies = [ "bincode", "circuit_testing", "codegen 0.2.0", "crossbeam 0.8.2", "derivative", - "env_logger 0.9.3", + "env_logger 0.10.1", "hex", - "num-bigint 0.4.3", + "num-bigint 0.4.4", "num-integer", "num-traits", "rayon", @@ -8786,32 +9415,31 @@ dependencies = [ "sync_vm", "test-log", "tracing", - "zk_evm 1.3.3", - "zkevm-assembly 1.3.2", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?branch=v1.3.3)", + "zkevm-assembly", ] [[package]] name = "zkevm_test_harness" version = "1.4.0" -source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#3cd647aa57fc2e1180bab53f7a3b61ec47502a46" +source = "git+https://github.com/matter-labs/era-zkevm_test_harness.git?branch=v1.4.0#d2e3670e0c5115b7cc7cc24e6d3dbdd17a214aad" dependencies = [ "bincode", "circuit_definitions", "codegen 0.2.0", "crossbeam 0.8.2", "derivative", - "env_logger 0.9.3", + "env_logger 0.10.1", "hex", + "rand 0.4.6", "rayon", - "rescue_poseidon 0.4.1 (git+https://github.com/matter-labs/rescue-poseidon.git?branch=poseidon2)", "serde", "serde_json", "smallvec", - "snark_wrapper", "structopt", "test-log", "tracing", - "zkevm-assembly 1.3.2", + "zkevm-assembly", ] [[package]] @@ -8821,8 +9449,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15bc9b106393359ac013c2527db318ced4ca838d26ef03488233af557ebe5da8" dependencies = [ "async-trait", - "clap 4.3.23", - "env_logger 0.10.0", + "clap 4.4.10", + "env_logger 0.10.1", "ethers", "ethers-contract", "hex", @@ -8838,7 +9466,7 @@ dependencies = [ [[package]] name = "zksync_basic_types" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "serde", "serde_json", @@ -8848,13 +9476,13 @@ dependencies = [ [[package]] name = "zksync_circuit_breaker" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "backon", "convert_case 0.6.0", - "futures 0.3.28", + "futures 0.3.29", "hex", "metrics", "serde_json", @@ -8868,29 +9496,193 @@ dependencies = [ "zksync_types", ] +[[package]] +name = "zksync_commitment_utils" +version = "0.1.0" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" +dependencies = [ + "zkevm_test_harness 1.4.0", + "zksync_types", + "zksync_utils", +] + +[[package]] +name = "zksync_concurrency" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "once_cell", + "pin-project", + "rand 0.8.5", + "sha3 0.10.8", + "thiserror", + "time", + "tokio", + "tracing", + "tracing-subscriber", + "vise", +] + [[package]] name = "zksync_config" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", - "bigdecimal", - "envy", + "serde", + "zksync_basic_types", +] + +[[package]] +name = "zksync_consensus_bft" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "once_cell", + "rand 0.8.5", + "thiserror", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_utils", + "zksync_protobuf", +] + +[[package]] +name = "zksync_consensus_crypto" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "blst", + "ed25519-dalek", + "ff_ce", "hex", - "num 0.3.1", + "pairing_ce 0.28.5 (git+https://github.com/matter-labs/pairing.git?rev=f55393f)", + "rand 0.4.6", + "rand 0.8.5", + "sha3 0.10.8", + "thiserror", + "tracing", +] + +[[package]] +name = "zksync_consensus_executor" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "prost", + "rand 0.8.5", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_bft", + "zksync_consensus_crypto", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_sync_blocks", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_network" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "async-trait", + "im", "once_cell", + "pin-project", + "prost", + "rand 0.8.5", + "snow", + "thiserror", + "tracing", + "vise", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_roles", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_roles" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "bit-vec", + "hex", + "prost", + "rand 0.8.5", "serde", - "serde_json", - "url", - "zksync_basic_types", - "zksync_contracts", - "zksync_utils", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_crypto", + "zksync_consensus_utils", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_storage" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "async-trait", + "prost", + "rand 0.8.5", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_roles", + "zksync_protobuf", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_consensus_sync_blocks" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "thiserror", + "tracing", + "zksync_concurrency", + "zksync_consensus_network", + "zksync_consensus_roles", + "zksync_consensus_storage", + "zksync_consensus_utils", +] + +[[package]] +name = "zksync_consensus_utils" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "thiserror", + "zksync_concurrency", ] [[package]] name = "zksync_contracts" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "envy", "ethabi 18.0.0", @@ -8904,7 +9696,7 @@ dependencies = [ [[package]] name = "zksync_core" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "actix-cors", "actix-rt", @@ -8916,7 +9708,7 @@ dependencies = [ "bitflags 1.3.2", "chrono", "ctrlc", - "futures 0.3.28", + "futures 0.3.29", "governor", "hex", "itertools 0.10.5", @@ -8931,6 +9723,7 @@ dependencies = [ "num 0.3.1", "once_cell", "prometheus_exporter", + "prost", "rand 0.8.5", "reqwest", "serde", @@ -8940,11 +9733,15 @@ dependencies = [ "tower", "tower-http", "tracing", + "vise", "vlog", - "vm", - "zkevm_test_harness 1.4.0", "zksync_circuit_breaker", + "zksync_commitment_utils", + "zksync_concurrency", "zksync_config", + "zksync_consensus_executor", + "zksync_consensus_roles", + "zksync_consensus_storage", "zksync_contracts", "zksync_dal", "zksync_eth_client", @@ -8954,10 +9751,13 @@ dependencies = [ "zksync_merkle_tree", "zksync_mini_merkle_tree", "zksync_object_store", + "zksync_protobuf", + "zksync_protobuf_build", "zksync_prover_utils", "zksync_queued_job_processor", "zksync_state", "zksync_storage", + "zksync_system_constants", "zksync_types", "zksync_utils", "zksync_verification_key_generator_and_server", @@ -8967,10 +9767,10 @@ dependencies = [ [[package]] name = "zksync_crypto" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "base64 0.13.1", - "blake2 0.10.6", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "hex", "once_cell", "serde", @@ -8982,7 +9782,7 @@ dependencies = [ [[package]] name = "zksync_dal" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bigdecimal", @@ -8991,6 +9791,8 @@ dependencies = [ "itertools 0.10.5", "num 0.3.1", "once_cell", + "prost", + "rand 0.8.5", "serde", "serde_json", "sqlx", @@ -8998,10 +9800,14 @@ dependencies = [ "thiserror", "tokio", "tracing", + "url", "vise", - "zksync_config", + "zksync_consensus_roles", "zksync_contracts", "zksync_health_check", + "zksync_protobuf", + "zksync_protobuf_build", + "zksync_system_constants", "zksync_types", "zksync_utils", ] @@ -9009,7 +9815,7 @@ dependencies = [ [[package]] name = "zksync_eth_client" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", @@ -9029,7 +9835,7 @@ dependencies = [ [[package]] name = "zksync_eth_signer" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "async-trait", "hex", @@ -9048,10 +9854,10 @@ dependencies = [ [[package]] name = "zksync_health_check" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "async-trait", - "futures 0.3.28", + "futures 0.3.29", "serde", "serde_json", "tokio", @@ -9061,7 +9867,7 @@ dependencies = [ [[package]] name = "zksync_mempool" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "tracing", "zksync_types", @@ -9070,7 +9876,7 @@ dependencies = [ [[package]] name = "zksync_merkle_tree" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "leb128", "once_cell", @@ -9087,7 +9893,7 @@ dependencies = [ [[package]] name = "zksync_mini_merkle_tree" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "once_cell", "zksync_basic_types", @@ -9097,7 +9903,7 @@ dependencies = [ [[package]] name = "zksync_object_store" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", @@ -9112,15 +9918,49 @@ dependencies = [ "zksync_types", ] +[[package]] +name = "zksync_protobuf" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "bit-vec", + "once_cell", + "prost", + "prost-reflect", + "quick-protobuf", + "rand 0.8.5", + "serde", + "serde_json", + "zksync_concurrency", + "zksync_protobuf_build", +] + +[[package]] +name = "zksync_protobuf_build" +version = "0.1.0" +source = "git+https://github.com/matter-labs/era-consensus.git?rev=da015d4c94b19962bc11622b6cc256e214256555#da015d4c94b19962bc11622b6cc256e214256555" +dependencies = [ + "anyhow", + "heck 0.4.1", + "prettyplease", + "proc-macro2 1.0.70", + "prost-build", + "prost-reflect", + "protox", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "zksync_prover_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "ctrlc", - "futures 0.3.28", + "futures 0.3.29", "regex", "reqwest", "tokio", @@ -9135,23 +9975,23 @@ dependencies = [ [[package]] name = "zksync_queued_job_processor" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "async-trait", "tokio", "tracing", + "vise", "zksync_utils", ] [[package]] name = "zksync_state" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "itertools 0.10.5", - "metrics", "mini-moka", "tokio", "tracing", @@ -9165,7 +10005,7 @@ dependencies = [ [[package]] name = "zksync_storage" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "num_cpus", "once_cell", @@ -9174,12 +10014,31 @@ dependencies = [ "vise", ] +[[package]] +name = "zksync_system_constants" +version = "0.1.0" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" +dependencies = [ + "anyhow", + "bigdecimal", + "hex", + "num 0.3.1", + "once_cell", + "serde", + "serde_json", + "url", + "zksync_basic_types", + "zksync_contracts", + "zksync_utils", +] + [[package]] name = "zksync_types" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ - "blake2 0.10.6", + "anyhow", + "blake2 0.10.6 (registry+https://github.com/rust-lang/crates.io-index)", "chrono", "codegen 0.1.0", "ethereum-types 0.12.1", @@ -9194,24 +10053,27 @@ dependencies = [ "serde_with", "strum 0.24.1", "thiserror", - "zk_evm 1.3.3", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", "zk_evm 1.4.0", "zkevm_test_harness 1.3.3", "zksync_basic_types", - "zksync_config", + "zksync_consensus_roles", "zksync_contracts", "zksync_mini_merkle_tree", + "zksync_protobuf", + "zksync_protobuf_build", + "zksync_system_constants", "zksync_utils", ] [[package]] name = "zksync_utils" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bigdecimal", - "futures 0.3.28", + "futures 0.3.29", "hex", "itertools 0.10.5", "metrics", @@ -9222,14 +10084,14 @@ dependencies = [ "tokio", "tracing", "vlog", - "zk_evm 1.3.3", + "zk_evm 1.3.3 (git+https://github.com/matter-labs/era-zk_evm.git?tag=v1.3.3-rc2)", "zksync_basic_types", ] [[package]] name = "zksync_verification_key_generator_and_server" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "anyhow", "bincode", @@ -9249,7 +10111,7 @@ dependencies = [ [[package]] name = "zksync_web3_decl" version = "0.1.0" -source = "git+https://github.com/matter-labs/zksync-era.git?rev=5e7bc64b393ee529e0473b79569931c326118893#5e7bc64b393ee529e0473b79569931c326118893" +source = "git+https://github.com/matter-labs/zksync-era.git?rev=ec5907b70ff7d868a05b685a1641d96dc4fa9d69#ec5907b70ff7d868a05b685a1641d96dc4fa9d69" dependencies = [ "bigdecimal", "chrono", @@ -9280,6 +10142,15 @@ dependencies = [ "zstd-safe 6.0.6", ] +[[package]] +name = "zstd" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110" +dependencies = [ + "zstd-safe 7.0.0", +] + [[package]] name = "zstd-safe" version = "5.0.2+zstd.1.5.2" @@ -9300,13 +10171,26 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e" +dependencies = [ + "zstd-sys", +] + [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", - "libc", "pkg-config", ] + +[[patch.unused]] +name = "sha3" +version = "0.10.6" +source = "git+https://github.com/RustCrypto/hashes?tag=sha3-v0.10.6#7a187e934c1f6c68e4b4e5cf37541b7a0d64d303" diff --git a/Cargo.toml b/Cargo.toml index b5802ed8..83a0d561 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "era_test_node" -version = "0.1.0-alpha.5" +version = "0.1.0-alpha.12" edition = "2018" authors = ["The Matter Labs Team "] homepage = "https://zksync.io/" @@ -11,15 +11,15 @@ categories = ["cryptography"] publish = false # We don't want to publish our binaries. [dependencies] -zksync_basic_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_core = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -vm = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_contracts = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_utils = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_state = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } -zksync_web3_decl = { git = "https://github.com/matter-labs/zksync-era.git", rev = "5e7bc64b393ee529e0473b79569931c326118893" } - +zksync_basic_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_core = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +multivm = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_contracts = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_types = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_utils = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_state = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +zksync_web3_decl = { git = "https://github.com/matter-labs/zksync-era.git", rev = "ec5907b70ff7d868a05b685a1641d96dc4fa9d69" } +sha3 = "0.10.6" openssl-sys = { version = "0.9", features = ["vendored"] } @@ -38,7 +38,7 @@ clap = { version = "4.2.4", features = ["derive"] } reqwest = { version = "0.11", features = ["blocking"] } serde = { version = "1.0", features = ["derive"] } tracing = { version = "0.1.26", features = ["log"] } -tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter", "time", "json"] } +tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter", "time", "json", "local-time"] } colored = "2.0" lazy_static = "1.4" eyre = "0.6" @@ -50,10 +50,14 @@ itertools = "0.10.5" rustc-hash = "1.1.0" indexmap = "2.0.1" chrono = { version = "0.4.31", default-features = false } +time = "0.3.30" [dev-dependencies] httptest = "0.15.4" tempdir = "0.3.7" maplit = "1.0.2" zksync-web3-rs = "0.1.1" -ethers = { version = "2.0.4", features = ["rustls"] } \ No newline at end of file +ethers = { version = "2.0.4", features = ["rustls"] } + +[patch.crates-io] +sha3 = { git = "https://github.com/RustCrypto/hashes", tag = "sha3-v0.10.6" } diff --git a/Makefile b/Makefile index 8ca281bc..51efd64e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Build the system contracts build-contracts: - cd etc/system-contracts && yarn; yarn install; yarn build; yarn preprocess; yarn compile-yul + cd etc/system-contracts && yarn; yarn install; yarn build ./scripts/refresh_contracts.sh # Clean the system contracts @@ -10,7 +10,7 @@ clean-contracts: # Rebuild the system contracts rebuild-contracts: - cd etc/system-contracts && yarn build; yarn preprocess; yarn build-bootloader + cd etc/system-contracts && yarn build ./scripts/refresh_contracts.sh ./scripts/refresh_test_contracts.sh diff --git a/SUPPORTED_APIS.md b/SUPPORTED_APIS.md index 0b5db81f..c5ad27f9 100644 --- a/SUPPORTED_APIS.md +++ b/SUPPORTED_APIS.md @@ -111,13 +111,14 @@ The `status` options are: | [`NETWORK`](#network-namespace) | [`net_version`](#net_version) | `SUPPORTED` | Returns the current network id
_(default is `260`)_ | | [`NETWORK`](#network-namespace) | [`net_peerCount`](#net_peercount) | `SUPPORTED` | Returns the number of peers currently connected to the client
_(hard-coded to `0`)_ | | [`NETWORK`](#network-namespace) | [`net_listening`](#net_listening) | `SUPPORTED` | Returns `true` if the client is actively listening for network connections
_(hard-coded to `false`)_ | +| [`WEB3`](#web3-namespace) | [`web3_clientVersion`](#web3_clientversion) | `SUPPORTED` | Returns `zkSync/v2.0` | | [`ZKS`](#zks-namespace) | [`zks_estimateFee`](#zks_estimateFee) | `SUPPORTED` | Gets the Fee estimation data for a given Request | | `ZKS` | `zks_estimateGasL1ToL2` | `NOT IMPLEMENTED` | Estimate of the gas required for a L1 to L2 transaction | -| `ZKS` | `zks_getAllAccountBalances` | `NOT IMPLEMENTED` | Returns all balances for confirmed tokens given by an account address | +| [`ZKS`](#zks-namespace) | [`zks_getAllAccountBalances`](#zks_getallaccountbalances) | `SUPPORTED` | Returns all balances for confirmed tokens given by an account address | | [`ZKS`](#zks-namespace) | [`zks_getBridgeContracts`](#zks_getbridgecontracts) | `SUPPORTED` | Returns L1/L2 addresses of default bridges | | [`ZKS`](#zks-namespace) | [`zks_getBlockDetails`](#zks_getblockdetails) | `SUPPORTED` | Returns additional zkSync-specific information about the L2 block | | `ZKS` | `zks_getBytecodeByHash` | `NOT IMPLEMENTED` | Returns bytecode of a transaction given by its hash | -| `ZKS` | `zks_getConfirmedTokens` | `NOT IMPLEMENTED` | Returns [address, symbol, name, and decimal] information of all tokens within a range of ids given by parameters `from` and `limit` | +| [`ZKS`](#zks-namespace) | [`zks_getConfirmedTokens`](#zks_getconfirmedtokens) | `SUPPORTED` | Returns [address, symbol, name, and decimal] information of all tokens within a range of ids given by parameters `from` and `limit` | | `ZKS` | `zks_getL1BatchBlockRange` | `NOT IMPLEMENTED` | Returns the range of blocks contained within a batch given by batch number | | `ZKS` | `zks_getL1BatchDetails` | `NOT IMPLEMENTED` | Returns data pertaining to a given batch | | `ZKS` | `zks_getL2ToL1LogProof` | `NOT IMPLEMENTED` | Given a transaction hash, and an index of the L2 to L1 log produced within the transaction, it returns the proof for the corresponding L2 to L1 log | @@ -134,7 +135,7 @@ The `status` options are: ### `config_getShowCalls` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Gets the current value of `show_calls` that's originally set with `--show-calls` option @@ -157,7 +158,7 @@ curl --request POST \ ### `config_getCurrentTimestamp` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Gets the value of `current_timestamp` for the node @@ -180,7 +181,7 @@ curl --request POST \ ### `config_setShowCalls` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_calls` to print more detailed call traces @@ -203,7 +204,7 @@ curl --request POST \ ### `config_setShowStorageLogs` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_storage_logs` to print storage log reads/writes @@ -226,7 +227,7 @@ curl --request POST \ ### `config_setShowVmDetails` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_vm_details` to print more detailed results from vm execution @@ -249,7 +250,7 @@ curl --request POST \ ### `config_setShowGasDetails` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `show_gas_details` to print more details about gas estimation and usage @@ -272,7 +273,7 @@ curl --request POST \ ### `config_setResolveHashes` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Updates `resolve-hashes` to call OpenChain for human-readable ABI names in call traces @@ -295,7 +296,7 @@ curl --request POST \ ### `config_setLogLevel` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Sets the logging level for the node and only displays the node logs. @@ -318,7 +319,7 @@ curl --request POST \ ### `config_setLogging` -[source](src/configuration_api.rs) +[source](src/node/config.rs) Sets the fine-tuned logging levels for the node and any of its dependencies. The directive format is comma-separated `module=level` for any number of modules. @@ -344,7 +345,7 @@ curl --request POST \ ### `debug_traceCall` -[source](src/debug.rs) +[source](src/node/debug.rs) The `debug_traceCall` is similar to `eth_call` but returns call traces for each call. @@ -388,7 +389,7 @@ curl --request POST \ ### `debug_traceTransaction` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for the transaction with given hash. @@ -425,7 +426,7 @@ curl --request POST \ ### `debug_traceBlockByHash` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for each transaction within a given block. @@ -462,7 +463,7 @@ curl --request POST \ ### `debug_traceBlockByNumber` -[source](src/debug.rs) +[source](src/node/debug.rs) Returns call traces for each transaction within a given block. @@ -501,7 +502,7 @@ curl --request POST \ ### `net_version` -[source](src/net.rs) +[source](src/node/net.rs) Returns the current network id @@ -524,7 +525,7 @@ curl --request POST \ ### `net_peerCount` -[source](src/net.rs) +[source](src/node/net.rs) Returns the number of connected peers @@ -547,7 +548,7 @@ curl --request POST \ ### `net_listening` -[source](src/net.rs) +[source](src/node/net.rs) Returns `true` if the node is listening for connections @@ -572,7 +573,7 @@ curl --request POST \ ### `eth_accounts` -[source](src/node.rs) +[source](src/node/eth.rs) Returns a list of addresses owned by client @@ -595,7 +596,7 @@ curl --request POST \ ### `eth_chainId` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current chain id @@ -618,7 +619,7 @@ curl --request POST \ ### `eth_estimateGas` -[source](src/node.rs) +[source](src/node/eth.rs) Generates and returns an estimate of how much gas is necessary to allow the transaction to complete @@ -654,7 +655,7 @@ curl --request POST \ ### `eth_feeHistory` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the fee history for a given range of blocks @@ -679,7 +680,7 @@ curl --request POST \ ### `eth_gasPrice` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current price per gas in wei @@ -702,7 +703,7 @@ curl --request POST \ ### `eth_getBalance` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the balance of the account of given address @@ -732,7 +733,7 @@ curl --request POST \ ### `eth_getBlockByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a block by block hash @@ -762,7 +763,7 @@ curl --request POST \ ### `eth_getBlockByNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a block by block number @@ -792,7 +793,7 @@ curl --request POST \ ### `eth_getBlockTransactionCountByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Number of transactions in a block from a block matching the given block hash @@ -820,7 +821,7 @@ curl --request POST \ ### `eth_getBlockTransactionCountByNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Number of transactions in a block from a block matching the given block number @@ -849,7 +850,7 @@ curl --request POST \ ### `eth_getFilterChanges` -[source](src/node.rs) +[source](src/node/eth.rs) Polling method for a filter, which returns an array of logs, block hashes, or transaction hashes, depending on the filter type, which occurred since last poll @@ -877,7 +878,7 @@ curl --request POST \ ### `eth_newBlockFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter in the node, to notify when a new block arrives @@ -904,7 +905,7 @@ curl --request POST \ ### `eth_newFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter object, based on filter options, to notify when the state changes (logs) @@ -937,7 +938,7 @@ curl --request POST \ ### `eth_newPendingTransactionFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Creates a filter in the node, to notify when new pending transactions arrive @@ -964,7 +965,7 @@ curl --request POST \ ### `eth_uninstallFilter` -[source](src/node.rs) +[source](src/node/eth.rs) Uninstalls a filter with given id @@ -992,7 +993,7 @@ curl --request POST \ ### `eth_getFilterLogs` -[source](src/node.rs) +[source](src/node/eth.rs) Returns an array of all logs matching filter with given id @@ -1020,7 +1021,7 @@ curl --request POST \ ### `eth_getLogs` -[source](src/node.rs) +[source](src/node/eth.rs) Returns an array of all logs matching a filter @@ -1053,7 +1054,7 @@ curl --request POST \ ### `eth_getCode` -[source](src/node.rs) +[source](src/node/eth.rs) Returns code at a given address @@ -1083,7 +1084,7 @@ curl --request POST \ ### `eth_getTransactionByHash` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the information about a transaction requested by transaction hash @@ -1111,7 +1112,7 @@ curl --request POST \ ### `eth_getTransactionCount` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the number of transactions sent from an address @@ -1141,7 +1142,7 @@ curl --request POST \ ### `eth_getTransactionReceipt` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the transaction receipt for a given transaction hash @@ -1169,7 +1170,7 @@ curl --request POST \ ### `eth_blockNumber` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the number of most recent block @@ -1192,7 +1193,7 @@ curl --request POST \ ### `eth_call` -[source](src/node.rs) +[source](src/node/eth.rs) Executes a new message call immediately without creating a transaction on the block chain @@ -1230,7 +1231,7 @@ curl --request POST \ ### `eth_sendRawTransaction` -[source](src/node.rs) +[source](src/node/eth.rs) Creates new message call transaction or a contract creation for signed transactions @@ -1254,7 +1255,7 @@ curl --request POST \ ### `eth_syncing` -[source](src/node.rs) +[source](src/node/eth.rs) Returns syncing status of the node. This will always return `false`. @@ -1278,7 +1279,7 @@ curl --request POST \ ### `eth_getStorageAt` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the value from a storage position at a given address. @@ -1308,7 +1309,7 @@ curl --request POST \ ### `eth_getTransactionByBlockHashAndIndex` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a transaction by block hash and transaction index position @@ -1337,7 +1338,7 @@ curl --request POST \ ### `eth_getTransactionByBlockNumberAndIndex` -[source](src/node.rs) +[source](src/node/eth.rs) Returns information about a transaction by block number and transaction index position @@ -1366,7 +1367,7 @@ curl --request POST \ ### `eth_protocolVersion` -[source](src/node.rs) +[source](src/node/eth.rs) Returns the current ethereum protocol version. @@ -1395,7 +1396,7 @@ curl --request POST \ ### `hardhat_setBalance` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sets the balance of the given address to the given balance. @@ -1427,7 +1428,7 @@ curl --request POST \ ### `hardhat_setNonce` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Modifies an account's nonce by overwriting it. The new nonce must be greater than the existing nonce. @@ -1456,7 +1457,7 @@ curl --request POST \ ### `hardhat_mine` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sometimes you may want to advance the latest block number of the network by a large number of blocks. One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. @@ -1486,7 +1487,7 @@ curl --request POST \ ``` ### `hardhat_impersonateAccount` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Begin impersonating account- subsequent transactions sent to the node will be committed as if they were initiated by the supplied address. @@ -1512,7 +1513,7 @@ curl --request POST \ ### `hardhat_stopImpersonatingAccount` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Stop impersonating account, should be used after calling `hardhat_impersonateAccount`. Since we only impersonate one account at a time, the `address` argument is ignored and the current @@ -1540,7 +1541,7 @@ curl --request POST \ ### `hardhat_setCode` -[source](src/hardhat.rs) +[source](src/node/hardhat.rs) Sets the code for a given address. @@ -1574,7 +1575,7 @@ curl --request POST \ ### `evm_mine` -[source](src/evm.rs) +[source](src/node/evm.rs) Mines an empty block @@ -1594,7 +1595,7 @@ curl --request POST \ ### `evm_increaseTime` -[source](src/evm.rs) +[source](src/node/evm.rs) Increase the current timestamp for the node @@ -1617,7 +1618,7 @@ curl --request POST \ ### `evm_setNextBlockTimestamp` -[source](src/evm.rs) +[source](src/node/evm.rs) Sets the timestamp of the next block but doesn't mine one.. @@ -1640,7 +1641,7 @@ curl --request POST \ ### `evm_setTime` -[source](src/evm.rs) +[source](src/node/evm.rs) Set the current timestamp for the node. Warning: This will allow you to move _backwards_ in time, which may cause new blocks to appear to be mined before old blocks. This will result in an invalid state. @@ -1664,7 +1665,7 @@ curl --request POST \ ### `evm_snapshot` -[source](src/evm.rs) +[source](src/node/evm.rs) Snapshot the state of the blockchain at the current block. @@ -1687,7 +1688,7 @@ curl --request POST \ ### `evm_revert` -[source](src/evm.rs) +[source](src/node/evm.rs) Revert the state of the blockchain to a previous snapshot @@ -1708,11 +1709,40 @@ curl --request POST \ --data '{"jsonrpc": "2.0","id": "1","method": "evm_revert","params": ["0x1"]}' ``` +## `WEB3 NAMESPACE` + +### `web3_clientVersion` + +[source](src/node/web3.rs) + +Returns the client version + +#### Arguments + ++ _NONE_ + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "web3_clientVersion" + }' +``` + ## `ZKS NAMESPACE` ### `zks_estimateFee` -[source](src/zks.rs) +[source](src/node/zks.rs) Generates and returns an estimate of how much gas is necessary to allow the transaction to complete @@ -1748,7 +1778,7 @@ curl --request POST \ ### `zks_getTokenPrice` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns the token price given an Address @@ -1771,7 +1801,7 @@ curl --request POST \ ### `zks_getTransactionDetails` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns data from a specific transaction given by the transaction hash. @@ -1794,7 +1824,7 @@ curl --request POST \ ### `zks_getBlockDetails` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns additional zkSync-specific information about the L2 block. @@ -1817,7 +1847,7 @@ curl --request POST \ ### `zks_getBridgeContracts` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns L1/L2 addresses of default bridges. @@ -1844,7 +1874,7 @@ curl --request POST \ ### `zks_getRawBlockTransactions` -[source](src/zks.rs) +[source](src/node/zks.rs) Returns data of transactions in a block. @@ -1864,3 +1894,60 @@ curl --request POST \ --header 'content-type: application/json' \ --data '{"jsonrpc": "2.0", "id": 1, "method": "zks_getRawBlockTransactions", "params": [ 140599 ]}' ``` + +### `zks_getConfirmedTokens` + +[source](src/zks.rs) + +Get list of the tokens supported by ZkSync Era. The tokens are returned in alphabetical order by their symbol. This means that the token id is its position in an alphabetically sorted array of tokens. + +#### Arguments + ++ `from: u32` - Offset of tokens ++ `limit: u8` - Limit of number of tokens to return + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getConfirmedTokens", + "params": [0, 100] +}' +``` + +### `zks_getAllAccountBalances` + +[source](src/zks.rs) + +Get all known balances for a given account. + +#### Arguments + ++ `address: Address` - The user address with balances to check. + +#### Status + +`SUPPORTED` + +#### Example + +```bash +curl --request POST \ + --url http://localhost:8011/ \ + --header 'content-type: application/json' \ + --data '{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getAllAccountBalances", + "params": ["0x364d6D0333432C3Ac016Ca832fb8594A8cE43Ca6"] +}' +``` diff --git a/e2e-tests/contracts/ERC20.sol b/e2e-tests/contracts/ERC20.sol new file mode 100644 index 00000000..bd56500f --- /dev/null +++ b/e2e-tests/contracts/ERC20.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +/** + * @dev This contract is for basic demonstration purposes only. It should not be used in production. + * It is for the convenience of the ERC20FixedPaymaster.sol contract and its corresponding test file. + */ +contract MyERC20 is ERC20 { + uint8 private _decimals; + + constructor( + string memory name, + string memory symbol, + uint8 decimals_ + ) payable ERC20(name, symbol) { + _decimals = decimals_; + } + + function mint(address _to, uint256 _amount) public returns (bool) { + _mint(_to, _amount); + return true; + } + + function decimals() public view override returns (uint8) { + return _decimals; + } + + function burn(address from, uint256 amount) public { + _burn(from, amount); + } +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC20FixedPaymaster.sol b/e2e-tests/contracts/ERC20FixedPaymaster.sol new file mode 100644 index 00000000..67c4a938 --- /dev/null +++ b/e2e-tests/contracts/ERC20FixedPaymaster.sol @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +import {IPaymaster, ExecutionResult, PAYMASTER_VALIDATION_SUCCESS_MAGIC} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymaster.sol"; +import {IPaymasterFlow} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymasterFlow.sol"; +import {TransactionHelper, Transaction} from "@matterlabs/zksync-contracts/l2/system-contracts/libraries/TransactionHelper.sol"; + +import "@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/// @author Matter Labs +/// @notice This smart contract pays the gas fees for accounts with balance of a specific ERC20 token. It makes use of the approval-based flow paymaster. +contract ERC20FixedPaymaster is IPaymaster, Ownable { + uint256 constant PRICE_FOR_PAYING_FEES = 1; + + address public allowedToken; + + modifier onlyBootloader() { + require( + msg.sender == BOOTLOADER_FORMAL_ADDRESS, + "Only bootloader can call this method" + ); + // Continue execution if called from the bootloader. + _; + } + + constructor(address _erc20) { + allowedToken = _erc20; + } + + function validateAndPayForPaymasterTransaction( + bytes32, + bytes32, + Transaction calldata _transaction + ) + external + payable + onlyBootloader + returns (bytes4 magic, bytes memory context) + { + // By default we consider the transaction as accepted. + magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; + require( + _transaction.paymasterInput.length >= 4, + "The standard paymaster input must be at least 4 bytes long" + ); + + bytes4 paymasterInputSelector = bytes4( + _transaction.paymasterInput[0:4] + ); + if (paymasterInputSelector == IPaymasterFlow.approvalBased.selector) { + // While the transaction data consists of address, uint256 and bytes data, + // the data is not needed for this paymaster + (address token, uint256 amount, bytes memory data) = abi.decode( + _transaction.paymasterInput[4:], + (address, uint256, bytes) + ); + + // Verify if token is the correct one + require(token == allowedToken, "Invalid token"); + + // We verify that the user has provided enough allowance + address userAddress = address(uint160(_transaction.from)); + + address thisAddress = address(this); + + uint256 providedAllowance = IERC20(token).allowance( + userAddress, + thisAddress + ); + require( + providedAllowance >= PRICE_FOR_PAYING_FEES, + "Min allowance too low" + ); + + // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, + // neither paymaster nor account are allowed to access this context variable. + uint256 requiredETH = _transaction.gasLimit * + _transaction.maxFeePerGas; + + try + IERC20(token).transferFrom(userAddress, thisAddress, amount) + {} catch (bytes memory revertReason) { + // If the revert reason is empty or represented by just a function selector, + // we replace the error with a more user-friendly message + if (revertReason.length <= 4) { + revert("Failed to transferFrom from users' account"); + } else { + assembly { + revert(add(0x20, revertReason), mload(revertReason)) + } + } + } + + // The bootloader never returns any data, so it can safely be ignored here. + (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ + value: requiredETH + }(""); + require( + success, + "Failed to transfer tx fee to the bootloader. Paymaster balance might not be enough." + ); + } else { + revert("Unsupported paymaster flow"); + } + } + + function postTransaction( + bytes calldata _context, + Transaction calldata _transaction, + bytes32, + bytes32, + ExecutionResult _txResult, + uint256 _maxRefundedGas + ) external payable override onlyBootloader { + } + + function withdraw(address _to) external onlyOwner { + // send paymaster funds to the owner + (bool success, ) = payable(_to).call{value: address(this).balance}(""); + require(success, "Failed to withdraw funds from paymaster."); + } + + receive() external payable {} + +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC721.sol b/e2e-tests/contracts/ERC721.sol new file mode 100644 index 00000000..2f352f6a --- /dev/null +++ b/e2e-tests/contracts/ERC721.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +// Importing OpenZeppelin's ERC721 Implementation +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +// Importing OpenZeppelin's Ownable contract to control ownership +import "@openzeppelin/contracts/access/Ownable.sol"; + +/** + * @dev This contract is for basic demonstration purposes only. It should not be used in production. + * It is for the convenience of the ERC721GatedPaymaster.sol contract and its corresponding test file. + */ +contract MyNFT is ERC721, Ownable { + // Maintains a counter of token IDs for uniqueness + uint256 public tokenCounter; + + // A constructor that gives my NFT a name and a symbol + constructor () ERC721 ("MyNFT", "MNFT"){ + // Initializes the tokenCounter to 0. Every new token has a unique ID starting from 1 + tokenCounter = 0; + } + + // Creates an NFT collection, with a unique token ID + function mint(address recipient) public onlyOwner returns (uint256) { + // Increases the tokenCounter by 1 and then mints the token with this new ID + _safeMint(recipient, tokenCounter); + + // Increments the token counter for the next token to be minted + tokenCounter = tokenCounter + 1; + + return tokenCounter; + } +} \ No newline at end of file diff --git a/e2e-tests/contracts/ERC721GatedPaymaster.sol b/e2e-tests/contracts/ERC721GatedPaymaster.sol new file mode 100644 index 00000000..b7b032fc --- /dev/null +++ b/e2e-tests/contracts/ERC721GatedPaymaster.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; + +import {IPaymaster, ExecutionResult, PAYMASTER_VALIDATION_SUCCESS_MAGIC} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymaster.sol"; +import {IPaymasterFlow} from "@matterlabs/zksync-contracts/l2/system-contracts/interfaces/IPaymasterFlow.sol"; +import {TransactionHelper, Transaction} from "@matterlabs/zksync-contracts/l2/system-contracts/libraries/TransactionHelper.sol"; + +import "@matterlabs/zksync-contracts/l2/system-contracts/Constants.sol"; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +/// @author Matter Labs +/// @notice This smart contract pays the gas fees on behalf of users that are the owner of a specific NFT asset +contract ERC721GatedPaymaster is IPaymaster, Ownable { + IERC721 private immutable nft_asset; + + modifier onlyBootloader() { + require( + msg.sender == BOOTLOADER_FORMAL_ADDRESS, + "Only bootloader can call this method" + ); + // Continue execution if called from the bootloader. + _; + } + + // The constructor takes the address of the ERC721 contract as an argument. + // The ERC721 contract is the asset that the user must hold in order to use the paymaster. + constructor(address _erc721) { + nft_asset = IERC721(_erc721); // Initialize the ERC721 contract + } + + // The gas fees will be paid for by the paymaster if the user is the owner of the required NFT asset. + function validateAndPayForPaymasterTransaction( + bytes32, + bytes32, + Transaction calldata _transaction + ) + external + payable + onlyBootloader + returns (bytes4 magic, bytes memory context) + { + // By default we consider the transaction as accepted. + magic = PAYMASTER_VALIDATION_SUCCESS_MAGIC; + require( + _transaction.paymasterInput.length >= 4, + "The standard paymaster input must be at least 4 bytes long" + ); + + bytes4 paymasterInputSelector = bytes4( + _transaction.paymasterInput[0:4] + ); + + // Use the general paymaster flow + if (paymasterInputSelector == IPaymasterFlow.general.selector) { + address userAddress = address(uint160(_transaction.from)); + // Verify if user has the required NFT asset in order to use paymaster + require( + nft_asset.balanceOf(userAddress) > 0, + "User does not hold the required NFT asset and therefore must for their own gas!" + ); + // Note, that while the minimal amount of ETH needed is tx.gasPrice * tx.gasLimit, + // neither paymaster nor account are allowed to access this context variable. + uint256 requiredETH = _transaction.gasLimit * + _transaction.maxFeePerGas; + + // The bootloader never returns any data, so it can safely be ignored here. + (bool success, ) = payable(BOOTLOADER_FORMAL_ADDRESS).call{ + value: requiredETH + }(""); + } else { + revert("Invalid paymaster flow"); + } + } + + function postTransaction( + bytes calldata _context, + Transaction calldata _transaction, + bytes32, + bytes32, + ExecutionResult _txResult, + uint256 _maxRefundedGas + ) external payable override onlyBootloader { + } + + function withdraw(address payable _to) external onlyOwner { + // send paymaster funds to the owner + uint256 balance = address(this).balance; + (bool success, ) = _to.call{value: balance}(""); + require(success, "Failed to withdraw funds from paymaster."); + } + + receive() external payable {} +} \ No newline at end of file diff --git a/e2e-tests/contracts/Greeter.sol b/e2e-tests/contracts/Greeter.sol index 252da0c4..abbbc8a7 100644 --- a/e2e-tests/contracts/Greeter.sol +++ b/e2e-tests/contracts/Greeter.sol @@ -16,7 +16,7 @@ contract Greeter is Ownable { return greeting; } - function setGreeting(string memory _greeting) public onlyOwner { + function setGreeting(string memory _greeting) public { console.log("setGreeting called"); console.log(_greeting); emit LogString(string.concat("Greeting is being updated to ", _greeting)); @@ -27,4 +27,11 @@ contract Greeter is Ownable { ); greeting = _greeting; } + + function setGreetingByOwner(string memory _greeting) public onlyOwner { + console.log("setGreetingByOwner called"); + console.log(_greeting); + emit LogString(string.concat("Greeting is being updated to ", _greeting)); + greeting = _greeting; + } } diff --git a/e2e-tests/package.json b/e2e-tests/package.json index 1b88c87f..88ef6bee 100644 --- a/e2e-tests/package.json +++ b/e2e-tests/package.json @@ -10,6 +10,7 @@ "@matterlabs/hardhat-zksync-deploy": "^0.6.5", "@matterlabs/hardhat-zksync-solc": "^0.4.2", "@matterlabs/prettier-config": "^1.0.3", + "@matterlabs/zksync-contracts": "0.6.1", "@nomiclabs/hardhat-ethers": "^2.2.3", "@openzeppelin/contracts": "^4.9.3", "@types/chai": "^4.3.4", diff --git a/e2e-tests/test/erc20-fixed-paymaster.test.ts b/e2e-tests/test/erc20-fixed-paymaster.test.ts new file mode 100644 index 00000000..6cbc3551 --- /dev/null +++ b/e2e-tests/test/erc20-fixed-paymaster.test.ts @@ -0,0 +1,115 @@ +import { expect } from "chai"; +import { Wallet, Provider, Contract, utils } from "zksync-web3"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import * as ethers from "ethers"; +import * as hre from "hardhat"; + +import { expectThrowsAsync, getTestProvider } from "../helpers/utils"; +import { RichAccounts } from "../helpers/constants"; + +describe("ERC20FixedPaymaster", function () { + let provider: Provider; + let richWallet: Wallet; + let deployer: Deployer; + let userWallet: Wallet; + let paymaster: Contract; + let greeter: Contract; + let token: Contract; + + before(async function () { + provider = getTestProvider(); + richWallet = new Wallet(RichAccounts[0].PrivateKey, provider); + deployer = new Deployer(hre, richWallet); + + // Setup new wallet + const emptyWallet = Wallet.createRandom(); + userWallet = new Wallet(emptyWallet.privateKey, provider); + + // Deploy ERC20 token, Paymaster, and Greeter + let artifact = await deployer.loadArtifact("MyERC20"); + token = await deployer.deploy(artifact, ["MyToken", "MyToken", 18]); + artifact = await deployer.loadArtifact("ERC20FixedPaymaster"); + paymaster = await deployer.deploy(artifact, [token.address]); + artifact = await deployer.loadArtifact("Greeter"); + greeter = await deployer.deploy(artifact, ["Hi"]); + + // Fund Paymaster + await provider.send("hardhat_setBalance", [paymaster.address, ethers.utils.parseEther("10")._hex]); + }); + + async function executeGreetingTransaction(user: Wallet, greeting: string) { + const gasPrice = await provider.getGasPrice(); + const token_address = token.address.toString(); + + const paymasterParams = utils.getPaymasterParams(paymaster.address, { + type: "ApprovalBased", + token: token_address, + minimalAllowance: ethers.BigNumber.from(1), + // empty bytes as testnet paymaster does not use innerInput + innerInput: new Uint8Array(), + }); + + // Estimate gasLimit via paymaster + const gasLimit = await greeter.connect(user).estimateGas.setGreeting(greeting, { + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + const setGreetingTx = await greeter.connect(user).setGreeting(greeting, { + maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxFeePerGas: gasPrice, + gasLimit, + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + await setGreetingTx.wait(); + } + + it("user with MyERC20 token can update message for free", async function () { + // Arrange + const initialMintAmount = ethers.utils.parseEther("3"); + const success = await token.mint(userWallet.address, initialMintAmount); + await success.wait(); + + const userInitialTokenBalance = await token.balanceOf(userWallet.address); + const userInitialETHBalance = await userWallet.getBalance(); + const initialPaymasterBalance = await provider.getBalance(paymaster.address); + + // Act + await executeGreetingTransaction(userWallet, "Hola, mundo!"); + + // Assert + const finalETHBalance = await userWallet.getBalance(); + const finalUserTokenBalance = await token.balanceOf(userWallet.address); + const finalPaymasterBalance = await provider.getBalance(paymaster.address); + + expect(await greeter.greet()).to.equal("Hola, mundo!"); + expect(initialPaymasterBalance.gt(finalPaymasterBalance)).to.be.true; + expect(userInitialETHBalance).to.eql(finalETHBalance); + expect(userInitialTokenBalance.gt(finalUserTokenBalance)).to.be.true; + }); + + it("should allow owner to withdraw all funds", async function () { + // Arrange + // Act + const tx = await paymaster.connect(richWallet).withdraw(userWallet.address); + await tx.wait(); + + // Assert + const finalContractBalance = await provider.getBalance(paymaster.address); + expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + }); + + it("should prevent non-owners from withdrawing funds", async function () { + const action = async () => { + await paymaster.connect(userWallet).withdraw(userWallet.address); + }; + + await expectThrowsAsync(action, "Ownable: caller is not the owner"); + }); +}); diff --git a/e2e-tests/test/erc721-gated-paymaster.test.ts b/e2e-tests/test/erc721-gated-paymaster.test.ts new file mode 100644 index 00000000..3229136b --- /dev/null +++ b/e2e-tests/test/erc721-gated-paymaster.test.ts @@ -0,0 +1,118 @@ +import { expect } from "chai"; +import { Wallet, Provider, Contract, utils } from "zksync-web3"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import * as ethers from "ethers"; +import * as hre from "hardhat"; + +import { expectThrowsAsync, getTestProvider } from "../helpers/utils"; +import { RichAccounts } from "../helpers/constants"; + +describe("ERC721GatedPaymaster", function () { + let provider: Provider; + let wallet: Wallet; + let deployer: Deployer; + let nftUserWallet: Wallet; + let paymaster: Contract; + let greeter: Contract; + let erc721: Contract; + + before(async function () { + provider = getTestProvider(); + wallet = new Wallet(RichAccounts[0].PrivateKey, provider); + deployer = new Deployer(hre, wallet); + + // Setup new wallets + nftUserWallet = Wallet.createRandom(); + nftUserWallet = new Wallet(nftUserWallet.privateKey, provider); + + // Deploy NFT and Paymaster + let artifact = await deployer.loadArtifact("MyNFT"); + erc721 = await deployer.deploy(artifact, []); + artifact = await deployer.loadArtifact("ERC721GatedPaymaster"); + paymaster = await deployer.deploy(artifact, [erc721.address]); + artifact = await deployer.loadArtifact("Greeter"); + greeter = await deployer.deploy(artifact, ["Hi"]); + + // Fund Paymaster + await provider.send("hardhat_setBalance", [paymaster.address, ethers.utils.parseEther("10")._hex]); + + // Assign NFT to nftUserWallet + const tx = await erc721.mint(nftUserWallet.address); + await tx.wait(); + }); + + async function executeGreetingTransaction(user: Wallet, greeting: string) { + const gasPrice = await provider.getGasPrice(); + const paymasterParams = utils.getPaymasterParams(paymaster.address, { + type: "General", + // empty bytes as paymaster does not use innerInput + innerInput: new Uint8Array(), + }); + + // estimate gasLimit via paymaster + const gasLimit = await greeter.connect(user).estimateGas.setGreeting(greeting, { + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams: paymasterParams, + }, + }); + + const setGreetingTx = await greeter.connect(user).setGreeting(greeting, { + maxPriorityFeePerGas: ethers.BigNumber.from(0), + maxFeePerGas: gasPrice, + gasLimit, + customData: { + gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT, + paymasterParams, + }, + }); + + await setGreetingTx.wait(); + } + + it("should not pay for gas fees when user has NFT", async function () { + // Arrange + const initialBalance = await nftUserWallet.getBalance(); + + // Act + await executeGreetingTransaction(nftUserWallet, "Hello World"); + + // Assert + expect(await greeter.greet()).to.equal("Hello World"); + const newBalance = await nftUserWallet.getBalance(); + expect(newBalance).to.eql(initialBalance); + }); + + it("should require the user to have the NFT", async function () { + // Arrange + let normalUserWallet = Wallet.createRandom(); + normalUserWallet = new Wallet(normalUserWallet.privateKey, provider); + + // Act + const action = async () => { + await executeGreetingTransaction(normalUserWallet, "Hello World"); + }; + + // Assert + await expectThrowsAsync(action, "User does not hold the required NFT asset and therefore must for their own gas!"); + }); + + it("should allow owner to withdraw all funds", async function () { + // Arrange + // Act + const tx = await paymaster.connect(wallet).withdraw(nftUserWallet.address); + await tx.wait(); + + // Assert + const finalContractBalance = await provider.getBalance(paymaster.address); + expect(finalContractBalance).to.eql(ethers.BigNumber.from(0)); + }); + + it("should prevent non-owners from withdrawing funds", async function () { + const action = async () => { + await paymaster.connect(nftUserWallet).withdraw(nftUserWallet.address); + }; + + await expectThrowsAsync(action, "Ownable: caller is not the owner"); + }); +}); diff --git a/e2e-tests/test/evm-apis.test.ts b/e2e-tests/test/evm-apis.test.ts index 17d6d950..5bdd8d70 100644 --- a/e2e-tests/test/evm-apis.test.ts +++ b/e2e-tests/test/evm-apis.test.ts @@ -102,13 +102,12 @@ describe("evm_snapshot", function () { expect(await greeter.greet()).to.eq("Hi"); // Act - const snapshotId1 = await provider.send("evm_snapshot", []); - const snapshotId2 = await provider.send("evm_snapshot", []); + const snapshotId1: string = await provider.send("evm_snapshot", []); + const snapshotId2: string = await provider.send("evm_snapshot", []); // Assert expect(await greeter.greet()).to.eq("Hi"); - expect(BigNumber.from(snapshotId1).toString()).to.eq("1"); - expect(BigNumber.from(snapshotId2).toString()).to.eq("2"); + expect(BigNumber.from(snapshotId2).toString()).to.eq(BigNumber.from(snapshotId1).add(1).toString()); }); }); diff --git a/e2e-tests/test/main.test.ts b/e2e-tests/test/main.test.ts index d2412dff..0aaf0a12 100644 --- a/e2e-tests/test/main.test.ts +++ b/e2e-tests/test/main.test.ts @@ -42,7 +42,7 @@ describe("Greeter Smart Contract", function () { const greeter = await deployer.deploy(artifact, ["Hello, world!"]); // should revert - const tx = await greeter.connect(userWallet).setGreeting("Hola, mundo!"); + const tx = await greeter.connect(userWallet).setGreetingByOwner("Hola, mundo!"); await tx.wait(); }; @@ -99,6 +99,7 @@ describe("Greeter Smart Contract", function () { expect(filterChanges.length).to.eq(1); expect(filterChanges[0].transactionHash).to.eq(receipt.transactionHash); expect(filterChanges[0].blockHash).to.eq(receipt.blockHash); + expect(filterChanges[0].removed).to.eq(false); const eventInterface = new ethers.utils.Interface(["event LogString(string value)"]); expect(eventInterface.parseLog(filterChanges[0]).args[0]).to.equal("Greeting is being updated to Darth Vader"); }); diff --git a/e2e-tests/test/web3-apis.test.ts b/e2e-tests/test/web3-apis.test.ts new file mode 100644 index 00000000..a17ad1d0 --- /dev/null +++ b/e2e-tests/test/web3-apis.test.ts @@ -0,0 +1,17 @@ +import { expect } from "chai"; +import { getTestProvider } from "../helpers/utils"; + +const provider = getTestProvider(); + +describe("web3_clientVersion", function () { + it("Should return zkSync/v2.0", async function () { + // Arrange + const expectedClientVersion = "zkSync/v2.0"; + + // Act + const response: string = await provider.send("web3_clientVersion", []); + + // Assert + expect(response).to.equal(expectedClientVersion); + }); +}); diff --git a/e2e-tests/test/zks-apis.test.ts b/e2e-tests/test/zks-apis.test.ts index dde269d5..01cd989e 100644 --- a/e2e-tests/test/zks-apis.test.ts +++ b/e2e-tests/test/zks-apis.test.ts @@ -2,7 +2,7 @@ import { expect } from "chai"; import { deployContract, getTestProvider } from "../helpers/utils"; import { Wallet } from "zksync-web3"; import { RichAccounts } from "../helpers/constants"; -import { ethers } from "ethers"; +import { BigNumber, ethers } from "ethers"; import * as hre from "hardhat"; import { TransactionRequest } from "zksync-web3/build/src/types"; import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; @@ -31,7 +31,7 @@ describe("zks_estimateFee", function () { const response: Fee = await provider.send("zks_estimateFee", [transaction]); // Assert - expect(ethers.BigNumber.from(response.gas_limit)).to.eql(ethers.BigNumber.from("1231992"), "Unexpected gas_limit"); + expect(ethers.BigNumber.from(response.gas_limit)).to.eql(ethers.BigNumber.from("1230957"), "Unexpected gas_limit"); expect(ethers.BigNumber.from(response.gas_per_pubdata_limit)).to.eql( ethers.BigNumber.from("4080"), "Unexpected gas_per_pubdata_limit" @@ -152,3 +152,28 @@ describe("zks_getRawBlockTransactions", function () { expect(txns[0]["execute"]["calldata"]).to.equal(receipt.data); }); }); + +describe("zks_getConfirmedTokens", function () { + it("Should return only Ether", async function () { + const tokens = await provider.send("zks_getConfirmedTokens", [0, 100]); + expect(tokens.length).to.equal(1); + expect(tokens[0].name).to.equal("Ether"); + }); +}); + +describe("zks_getAllAccountBalances", function () { + it("Should return balance of a rich account", async function () { + // Arrange + const account = RichAccounts[0].Account; + const expectedBalance = ethers.utils.parseEther("1000000000000"); // 1_000_000_000_000 ETH + const ethAddress = "0x000000000000000000000000000000000000800a"; + await provider.send("hardhat_setBalance", [account, expectedBalance._hex]); + + // Act + const balances = await provider.send("zks_getAllAccountBalances", [account]); + const ethBalance = BigNumber.from(balances[ethAddress]); + + // Assert + expect(ethBalance.eq(expectedBalance)).to.be.true; + }); +}); diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock index b417312f..2fe3c168 100644 --- a/e2e-tests/yarn.lock +++ b/e2e-tests/yarn.lock @@ -507,6 +507,11 @@ resolved "https://registry.yarnpkg.com/@matterlabs/prettier-config/-/prettier-config-1.0.3.tgz#3e2eb559c0112bbe9671895f935700dad2a15d38" integrity sha512-JW7nHREPqEtjBWz3EfxLarkmJBD8vi7Kx/1AQ6eBZnz12eHc1VkOyrc6mpR5ogTf0dOUNXFAfZut+cDe2dn4kQ== +"@matterlabs/zksync-contracts@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@matterlabs/zksync-contracts/-/zksync-contracts-0.6.1.tgz#39f061959d5890fd0043a2f1ae710f764b172230" + integrity sha512-+hucLw4DhGmTmQlXOTEtpboYCaOm/X2VJcWmnW4abNcOgQXEHX+mTxQrxEfPjIZT0ZE6z5FTUrOK9+RgUZwBMQ== + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" diff --git a/etc/system-contracts/SystemConfig.json b/etc/system-contracts/SystemConfig.json index 973e0dc0..827e11b5 100644 --- a/etc/system-contracts/SystemConfig.json +++ b/etc/system-contracts/SystemConfig.json @@ -9,9 +9,9 @@ "L1_TX_INTRINSIC_L2_GAS": 167157, "L1_TX_INTRINSIC_PUBDATA": 88, "MAX_GAS_PER_TRANSACTION": 80000000, - "BOOTLOADER_MEMORY_FOR_TXS": 273132, + "BOOTLOADER_MEMORY_FOR_TXS": 8740224, "REFUND_GAS": 7343, "KECCAK_ROUND_COST_GAS": 40, "SHA256_ROUND_COST_GAS": 7, "ECRECOVER_COST_GAS": 1112 -} \ No newline at end of file +} diff --git a/etc/system-contracts/VERSION.md b/etc/system-contracts/VERSION.md new file mode 100644 index 00000000..d8e0e48b --- /dev/null +++ b/etc/system-contracts/VERSION.md @@ -0,0 +1,17 @@ +This directory was copied from https://github.com/matter-labs/era-system-contracts +The current commit: `a00ab9a11643f3a918ed95cdf8a04edff5499d92` +The following directories/files were copied: +- [bootloader](bootloader) +- [contracts](contracts) +- [scripts](scripts) +- [hardhat.config.ts](hardhat.config.ts) +- [package.json](package.json) +- [SystemConfig.json](SystemConfig.json) +- [yarn.lock](yarn.lock) + +The next changes were introduced: +- [bootloader.yul](bootloader%2Fbootloader.yul) + - Debug data, marked as `DEBUG SUPPORT` blocks. + - Impersonating preprocessing mode, blocks `` and at some places added `` condition. +- [process.ts](scripts%2Fprocess.ts) + - Impersonating preprocessing mode, "For impersonating" blocks. diff --git a/etc/system-contracts/bootloader/bootloader.yul b/etc/system-contracts/bootloader/bootloader.yul index 472bf5d8..3e55ea37 100644 --- a/etc/system-contracts/bootloader/bootloader.yul +++ b/etc/system-contracts/bootloader/bootloader.yul @@ -3,6 +3,8 @@ object "Bootloader" { } object "Bootloader_deployed" { code { + {{CODE_START_PLACEHOLDER}} + //////////////////////////////////////////////////////////////////////////// // Function Declarations //////////////////////////////////////////////////////////////////////////// @@ -36,8 +38,8 @@ object "Bootloader" { function getBaseFee(l1GasPrice, fairL2GasPrice) -> baseFee, gasPricePerPubdata { // By default, we want to provide the fair L2 gas price. // That it means that the operator controls - // what the value of the baseFee will be. In the future, - // a better system, aided by EIP1559 should be added. + // what the value of the baseFee will be. In the future, + // a better system, aided by EIP1559 should be added. let pubdataBytePriceETH := safeMul(l1GasPrice, L1_GAS_PER_PUBDATA_BYTE(), "aoa") @@ -48,20 +50,20 @@ object "Bootloader" { gasPricePerPubdata := ceilDiv(pubdataBytePriceETH, baseFee) } - /// @dev It should be always possible to submit a transaction + /// @dev It should be always possible to submit a transaction /// that consumes such amount of public data. function GUARANTEED_PUBDATA_PER_TX() -> ret { ret := {{GUARANTEED_PUBDATA_BYTES}} } - /// @dev The maximal gasPerPubdata, which allows users to still be + /// @dev The maximal gasPerPubdata, which allows users to still be /// able to send `GUARANTEED_PUBDATA_PER_TX` onchain. function MAX_L2_GAS_PER_PUBDATA() -> ret { ret := div(MAX_GAS_PER_TRANSACTION(), GUARANTEED_PUBDATA_PER_TX()) } /// @dev The computational overhead for a batch. - /// It includes the combined price for 1 instance of all the circuits + /// It includes the combined price for 1 instance of all the circuits /// (since they might be partially filled), the price for running /// the common parts of the bootloader as well as general maintainance of the system. function BATCH_OVERHEAD_L2_GAS() -> ret { @@ -69,7 +71,7 @@ object "Bootloader" { } /// @dev The overhead for the interaction with L1. - /// It should cover proof verification as well as other minor + /// It should cover proof verification as well as other minor /// overheads for committing/executing a transaction in a batch. function BATCH_OVERHEAD_L1_GAS() -> ret { ret := {{BATCH_OVERHEAD_L1_GAS}} @@ -81,7 +83,7 @@ object "Bootloader" { } /// @dev The number of L1 gas needed to be spent for - /// L1 byte. While a single pubdata byte costs `16` gas, + /// L1 byte. While a single pubdata byte costs `16` gas, /// we demand at least 17 to cover up for the costs of additional /// hashing of it, etc. function L1_GAS_PER_PUBDATA_BYTE() -> ret { @@ -99,7 +101,7 @@ object "Bootloader" { function FORBID_ZERO_GAS_PER_PUBDATA() -> ret { ret := {{FORBID_ZERO_GAS_PER_PUBDATA}} } - + /// @dev The maximum number of transactions per L1 batch. function MAX_TRANSACTIONS_IN_BATCH() -> ret { ret := {{MAX_TRANSACTIONS_IN_BATCH}} @@ -117,20 +119,20 @@ object "Bootloader" { ret := mul(SCRATCH_SPACE_BEGIN_SLOT(), 32) } - /// @dev The first 32 slots are reserved for event emitting for the + /// @dev The first 32 slots are reserved for event emitting for the /// debugging purposes function SCRATCH_SPACE_SLOTS() -> ret { ret := 32 } /// @dev Slots reserved for saving the paymaster context - /// @dev The paymasters are allowed to consume at most + /// @dev The paymasters are allowed to consume at most /// 32 slots (1024 bytes) for their context. /// The 33 slots are required since the first one stores the length of the calldata. function PAYMASTER_CONTEXT_SLOTS() -> ret { ret := 33 } - + /// @dev Bytes reserved for saving the paymaster context function PAYMASTER_CONTEXT_BYTES() -> ret { ret := mul(PAYMASTER_CONTEXT_SLOTS(), 32) @@ -146,7 +148,7 @@ object "Bootloader" { ret := mul(PAYMASTER_CONTEXT_BEGIN_SLOT(), 32) } - /// @dev Each tx must have at least this amount of unused bytes before them to be able to + /// @dev Each tx must have at least this amount of unused bytes before them to be able to /// encode the postOp operation correctly. function MAX_POSTOP_SLOTS() -> ret { // Before the actual transaction encoding, the postOp contains 6 slots: @@ -180,7 +182,7 @@ object "Bootloader" { ret := 32 } - /// @dev Besides the factory deps themselves, we also need another 4 slots for: + /// @dev Besides the factory deps themselves, we also need another 4 slots for: /// selector, marker of whether the user should pay for the pubdata, /// the offset for the encoding of the array as well as the length of the array. function NEW_FACTORY_DEPS_RESERVED_SLOTS() -> ret { @@ -237,7 +239,7 @@ object "Bootloader" { } /// @dev byte starting from which the maximum number of gas that the operator "trusts" - /// the transaction to use for its execution is stored. + /// the transaction to use for its execution is stored. function TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_BYTE() -> ret { ret := mul(TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT(), 32) } @@ -273,8 +275,8 @@ object "Bootloader" { } /// @dev The number of slots dedicated for the L2 block information for the transactions. - /// Note, that an additional slot is required for the fictive L2 block at the end of the batch. - /// For technical reasons inside the sequencer implementation, + /// Note, that an additional slot is required for the fictive L2 block at the end of the batch. + /// For technical reasons inside the sequencer implementation, /// each batch ends with a fictive block with no transactions. function TX_OPERATOR_L2_BLOCK_INFO_SLOTS() -> ret { ret := mul(add(MAX_TRANSACTIONS_IN_BATCH(), 1), TX_OPERATOR_L2_BLOCK_INFO_SLOT_SIZE()) @@ -284,11 +286,11 @@ object "Bootloader" { /// Each compressed bytecode is provided in the following format: /// - 32 byte formatted bytecode hash /// - 32 byte of zero (it will be replaced within the code with left-padded selector of the `publishCompressedBytecode`). - /// - ABI-encoding of the parameters of the `publishCompressedBytecode` method. - /// + /// - ABI-encoding of the parameters of the `publishCompressedBytecode` method. + /// /// At the slot `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT()` the pointer to the currently processed compressed bytecode /// is stored, i.e. this pointer will be increased once the current bytecode which the pointer points to is published. - /// At the start of the bootloader, the value stored at the `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT` is equal to + /// At the start of the bootloader, the value stored at the `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT` is equal to /// `TX_OPERATOR_TRUSTED_GAS_LIMIT_BEGIN_SLOT + 32`, where the hash of the first compressed bytecode to publish should be stored. function COMPRESSED_BYTECODES_BEGIN_SLOT() -> ret { ret := add(TX_OPERATOR_L2_BLOCK_INFO_BEGIN_SLOT(), TX_OPERATOR_L2_BLOCK_INFO_SLOTS()) @@ -340,7 +342,7 @@ object "Bootloader" { } /// @dev Slots needed to store L1 Messenger pubdata. - /// @dev Note that are many more these than the maximal pubdata in batch, since + /// @dev Note that are many more these than the maximal pubdata in batch, since /// it needs to also accomodate uncompressed state diffs that are required for the state diff /// compression verification. function OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_SLOTS() -> ret { @@ -363,7 +365,7 @@ object "Bootloader" { } // Each tx description has the following structure - // + // // struct BootloaderTxDescription { // uint256 txMeta; // uint256 txDataOffset; @@ -375,7 +377,7 @@ object "Bootloader" { // 0 byte: `execute`, bool. Denotes whether transaction should be executed by the bootloader. // 31 byte: server-side tx execution mode // For proved batches: - // It can simply denotes whether to execute the transaction (0 to stop executing the batch, 1 to continue) + // It can simply denotes whether to execute the transaction (0 to stop executing the batch, 1 to continue) // // Each such encoded struct consumes 2 words function TX_DESCRIPTION_SIZE() -> ret { @@ -388,9 +390,9 @@ object "Bootloader" { } /// @dev The memory page consists of 2^19 VM words. - /// Each execution result is a single boolean, but + /// Each execution result is a single boolean, but /// for the sake of simplicity we will spend 32 bytes on each - /// of those for now. + /// of those for now. function MAX_MEM_SIZE() -> ret { ret := 0x1000000 // 2^24 bytes } @@ -481,7 +483,7 @@ object "Bootloader" { function CONTRACT_DEPLOYER_ADDR() -> ret { ret := 0x0000000000000000000000000000000000008006 } - + function FORCE_DEPLOYER() -> ret { ret := 0x0000000000000000000000000000000000008007 } @@ -511,7 +513,7 @@ object "Bootloader" { } /// @dev The minimal allowed distance in bytes between the pointer to the compressed data - /// and the end of the area dedicated for the compressed bytecodes. + /// and the end of the area dedicated for the compressed bytecodes. /// In fact, only distance of 192 should be sufficient: there it would be possible to insert /// the hash of the bytecode, the 32 bytes buffer for selector and 2 offsets of the calldata, /// but we keep it at 512 just in case. @@ -520,7 +522,7 @@ object "Bootloader" { } /// @dev Whether the bootloader should enforce that accounts have returned the correct - /// magic value for signature. This value is enforced to be "true" on the main proved batch, but + /// magic value for signature. This value is enforced to be "true" on the main proved batch, but /// we need the ability to ignore invalid signature results during fee estimation, /// where the signature for the transaction is usually not known beforehand. function SHOULD_ENSURE_CORRECT_RETURNED_MAGIC() -> ret { @@ -537,7 +539,7 @@ object "Bootloader" { ret := 255 } - /// @dev The overhead in gas that will be used when checking whether the context has enough gas, i.e. + /// @dev The overhead in gas that will be used when checking whether the context has enough gas, i.e. /// when checking for X gas, the context should have at least X+CHECK_ENOUGH_GAS_OVERHEAD() gas. function CHECK_ENOUGH_GAS_OVERHEAD() -> ret { ret := 1000000 @@ -554,7 +556,7 @@ object "Bootloader" { ret := 0 } } - + /// @dev Calculates the length of a given number of bytes rounded up to the nearest multiple of 32. function lengthRoundedByWords(len) -> ret { let neededWords := div(add(len, 31), 32) @@ -565,11 +567,11 @@ object "Bootloader" { /// @param txDataOffset The offset to the ABI-encoding of the structure /// @param resultPtr The pointer at which the result of the transaction's execution should be stored /// @param transactionIndex The index of the transaction in the batch - /// @param isETHCall Whether the call is an ethCall. - /// @param gasPerPubdata The number of L2 gas to charge users for each byte of pubdata + /// @param isETHCall Whether the call is an ethCall. + /// @param gasPerPubdata The number of L2 gas to charge users for each byte of pubdata /// On proved batch this value should always be zero function processTx( - txDataOffset, + txDataOffset, resultPtr, transactionIndex, isETHCall, @@ -588,20 +590,20 @@ object "Bootloader" { debugLog("gasPerPubdata:", gasPerPubdata) - switch getTxType(innerTxDataOffset) + switch getTxType(innerTxDataOffset) case 254 { // This is an upgrade transaction. // Protocol upgrade transactions are processed totally in the same manner as the normal L1->L2 transactions, // the only difference are: // - They must be the first one in the batch - // - They have a different type to prevent tx hash collisions and preserve the expectation that the + // - They have a different type to prevent tx hash collisions and preserve the expectation that the // L1->L2 transactions have priorityTxId inside them. - if transactionIndex { + if transactionIndex { assertionError("Protocol upgrade tx not first") } // This is to be called in the event that the L1 Transaction is a protocol upgrade txn. - // Since this is upgrade transactions, we are okay that the gasUsed by the transaction will + // Since this is upgrade transactions, we are okay that the gasUsed by the transaction will // not cover this additional hash computation let canonicalL1TxHash := getCanonicalL1TxHash(txDataOffset) sendToL1Native(true, protocolUpgradeTxHashKey(), canonicalL1TxHash) @@ -617,7 +619,7 @@ object "Bootloader" { if lt(userProvidedPubdataPrice, gasPerPubdata) { revertWithReason(UNACCEPTABLE_GAS_PRICE_ERR_CODE(), 0) } - + setPricePerPubdataByte(gasPerPubdata) @@ -625,7 +627,7 @@ object "Bootloader" { - switch isETHCall + switch isETHCall case 1 { let gasLimit := getGasLimit(innerTxDataOffset) let nearCallAbi := getNearCallABI(gasLimit) @@ -645,17 +647,47 @@ object "Bootloader" { resultPtr ) } - default { + default { processL2Tx(txDataOffset, resultPtr, transactionIndex, gasPerPubdata) } } } + /// @dev Checks whether the code hash of the system context contract is correct and updates it if needed. + /// @dev The L1 contracts expect all the system logs to be present in the first boojum upgrade batch already. + /// However, the old system context did not send the same system logs. Usually we upgrade system context + /// via an upgrade transaction, but in this case the transaction won't be even processed, because of failure to create an L2 block. + function upgradeSystemContextIfNeeded() { + let expectedCodeHash := {{SYSTEM_CONTEXT_EXPECTED_CODE_HASH}} + + let actualCodeHash := extcodehash(SYSTEM_CONTEXT_ADDR()) + if iszero(eq(expectedCodeHash, actualCodeHash)) { + // Preparing the calldata to upgrade the SystemContext contract + {{UPGRADE_SYSTEM_CONTEXT_CALLDATA}} + + // We'll use a mimicCall to simulate the correct sender. + let success := mimicCallOnlyResult( + CONTRACT_DEPLOYER_ADDR(), + FORCE_DEPLOYER(), + 0, + 0, + 0, + 0, + 0, + 0 + ) + + if iszero(success) { + assertionError("system context upgrade fail") + } + } + } + /// @dev Calculates the canonical hash of the L1->L2 transaction that will be /// sent to L1 as a message to the L1 contract that a certain operation has been processed. function getCanonicalL1TxHash(txDataOffset) -> ret { - // Putting the correct value at the `txDataOffset` just in case, since + // Putting the correct value at the `txDataOffset` just in case, since // the correctness of this value is not part of the system invariants. // Note, that the correct ABI encoding of the Transaction structure starts with 0x20 mstore(txDataOffset, 32) @@ -670,7 +702,7 @@ object "Bootloader" { } /// @dev The purpose of this function is to make sure that the operator - /// gets paid for the transaction. Note, that the beneficiary of the payment is + /// gets paid for the transaction. Note, that the beneficiary of the payment is /// bootloader. /// The operator will be paid at the end of the batch. function ensurePayment(txDataOffset, gasPrice) { @@ -701,10 +733,10 @@ object "Bootloader" { 1 ) } - } + } default { // There is some paymaster present. - payer := paymaster + payer := paymaster // Firstly, the `prepareForPaymaster` method of the user's account is called. setHook(VM_HOOK_ACCOUNT_VALIDATION_ENTERED()) @@ -735,7 +767,7 @@ object "Bootloader" { let bootloaderReceivedFunds := safeSub(balance(BOOTLOADER_FORMAL_ADDR()), bootloaderBalanceETH, "qsx") // If the amount of funds provided to the bootloader is less than the minimum required one - // then this transaction should be rejected. + // then this transaction should be rejected. if lt(bootloaderReceivedFunds, requiredETH) { revertWithReason( FAILED_TO_CHARGE_FEE_ERR_CODE(), @@ -743,7 +775,7 @@ object "Bootloader" { ) } - let excessiveFunds := safeSub(bootloaderReceivedFunds, requiredETH, "llm") + let excessiveFunds := safeSub(bootloaderReceivedFunds, requiredETH, "llm") if gt(excessiveFunds, 0) { // Returning back the excessive funds taken. @@ -752,7 +784,7 @@ object "Bootloader" { } /// @notice Mints ether to the recipient - /// @param to -- the address of the recipient + /// @param to -- the address of the recipient /// @param amount -- the amount of ETH to mint /// @param useNearCallPanic -- whether to use nearCallPanic in case of /// the transaction failing to execute. It is desirable in cases @@ -771,7 +803,7 @@ object "Bootloader" { 0 ) if iszero(success) { - switch useNearCallPanic + switch useNearCallPanic case 0 { revertWithReason( MINT_ETHER_FAILED_ERR_CODE(), @@ -784,9 +816,9 @@ object "Bootloader" { } } - /// @dev Saves the paymaster context and checks that the paymaster has returned the correct + /// @dev Saves the paymaster context and checks that the paymaster has returned the correct /// magic value. - /// @dev IMPORTANT: this method should be called right after + /// @dev IMPORTANT: this method should be called right after /// the validateAndPayForPaymasterTransaction method to keep the `returndata` from that transaction function storePaymasterContextAndCheckMagic() { // The paymaster validation step should return context of type "bytes context" @@ -803,7 +835,7 @@ object "Bootloader" { // Note that it is important to copy the magic even though it is not needed if the // `SHOULD_ENSURE_CORRECT_RETURNED_MAGIC` is false. It is never false in production - // but it is so in fee estimation and we want to preserve as many operations as + // but it is so in fee estimation and we want to preserve as many operations as // in the original operation. { returndatacopy(0, 0, 32) @@ -887,8 +919,8 @@ object "Bootloader" { gasPerPubdata, isPriorityOp ) { - // For L1->L2 transactions we always use the pubdata price provided by the transaction. - // This is needed to ensure DDoS protection. All the excess expenditure + // For L1->L2 transactions we always use the pubdata price provided by the transaction. + // This is needed to ensure DDoS protection. All the excess expenditure // will be refunded to the user. setPricePerPubdataByte(gasPerPubdata) @@ -896,10 +928,10 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) let gasLimitForTx, reservedGas := getGasLimitForTx( - innerTxDataOffset, - transactionIndex, - gasPerPubdata, - L1_TX_INTRINSIC_L2_GAS(), + innerTxDataOffset, + transactionIndex, + gasPerPubdata, + L1_TX_INTRINSIC_L2_GAS(), L1_TX_INTRINSIC_PUBDATA() ) @@ -915,7 +947,7 @@ object "Bootloader" { // for the transaction must be enforced on L1, but we double check it here let gasLimit := getGasLimit(innerTxDataOffset) - // Note, that for now the property of block.base <= tx.maxFeePerGas does not work + // Note, that for now the property of block.base <= tx.maxFeePerGas does not work // for L1->L2 transactions. For now, these transactions are processed with the same gasPrice // they were provided on L1. In the future, we may apply a new logic for it. let gasPrice := getMaxFeePerGas(innerTxDataOffset) @@ -924,7 +956,7 @@ object "Bootloader" { if lt(getReserved0(innerTxDataOffset), safeAdd(value, txInternalCost, "ol")) { assertionError("deposited eth too low") } - + if gt(gasLimitForTx, gasUsedOnPreparation) { let potentialRefund := 0 @@ -935,11 +967,9 @@ object "Bootloader" { // In case the operator provided smaller refund than the one calculated // by the bootloader, we return the refund calculated by the bootloader. - refundGas := max(getOperatorRefundForTx(transactionIndex), potentialRefund) + refundGas := max(getOperatorRefundForTx(transactionIndex), safeAdd(potentialRefund, reservedGas, "iop")) } - refundGas := add(refundGas, reservedGas) - if gt(refundGas, gasLimit) { assertionError("L1: refundGas > gasLimit") } @@ -948,7 +978,7 @@ object "Bootloader" { // Note, that for now, the L1->L2 transactions are free, i.e. the gasPrice // for such transactions is always zero, so the `refundGas` is not used anywhere - // except for notifications for the operator for API purposes. + // except for notifications for the operator for API purposes. notifyAboutRefund(refundGas) // Paying the fee to the operator @@ -957,14 +987,18 @@ object "Bootloader" { let toRefundRecipient switch success case 0 { + if iszero(isPriorityOp) { + // Upgrade transactions must always succeed + assertionError("Upgrade tx failed") + } + // If the transaction reverts, then minting the msg.value to the user has been reverted - // as well, so we can simply mint everything that the user has deposited to + // as well, so we can simply mint everything that the user has deposited to // the refund recipient - toRefundRecipient := safeSub(getReserved0(innerTxDataOffset), payToOperator, "vji") } default { - // If the transaction succeeds, then it is assumed that msg.value was transferred correctly. However, the remaining + // If the transaction succeeds, then it is assumed that msg.value was transferred correctly. However, the remaining // ETH deposited will be given to the refund recipient. toRefundRecipient := safeSub(getReserved0(innerTxDataOffset), safeAdd(getValue(innerTxDataOffset), payToOperator, "kpa"), "ysl") @@ -976,10 +1010,10 @@ object "Bootloader" { // In case of an issue in L1 contracts, we still will be able to process tx. refundRecipient := and(refundRecipient, sub(shl(160, 1), 1)) mintEther(refundRecipient, toRefundRecipient, false) - } + } mstore(resultPtr, success) - + debugLog("Send message to L1", success) // Sending the L2->L1 log so users will be able to prove transaction execution result on L1. @@ -991,7 +1025,7 @@ object "Bootloader" { mstore(32, canonicalL1TxHash) mstore(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), keccak256(0, 64)) mstore(add(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), 32), add(mload(add(PRIORITY_TXS_L1_DATA_BEGIN_BYTE(), 32)), 1)) - } + } } function getExecuteL1TxAndGetRefund(txDataOffset, gasForExecution) -> potentialRefund, success { @@ -1022,7 +1056,7 @@ object "Bootloader" { /// @return gasUsedOnPreparation The number of L2 gas used in the preparation stage function l1TxPreparation(txDataOffset) -> canonicalL1TxHash, gasUsedOnPreparation { let innerTxDataOffset := add(txDataOffset, 32) - + let gasBeforePreparation := gas() debugLog("gasBeforePreparation", gasBeforePreparation) @@ -1040,12 +1074,12 @@ object "Bootloader" { debugLog("gasUsedOnPreparation", gasUsedOnPreparation) } - /// @dev Returns the gas price that should be used by the transaction + /// @dev Returns the gas price that should be used by the transaction /// based on the EIP1559's maxFeePerGas and maxPriorityFeePerGas. /// The following invariants should hold: /// maxPriorityFeePerGas <= maxFeePerGas /// baseFee <= maxFeePerGas - /// While we charge baseFee from the users, the method is mostly used as a method for validating + /// While we charge baseFee from the users, the method is mostly used as a method for validating /// the correctness of the fee parameters function getGasPrice( maxFeePerGas, @@ -1067,7 +1101,7 @@ object "Bootloader" { ) } - // We always use `baseFee` to charge the transaction + // We always use `baseFee` to charge the transaction ret := baseFee } @@ -1089,7 +1123,7 @@ object "Bootloader" { // Firsly, we publish all the bytecodes needed. This is needed to be done separately, since // bytecodes usually form the bulk of the L2 gas prices. - + let gasLimitForTx, reservedGas := getGasLimitForTx(innerTxDataOffset, transactionIndex, gasPerPubdata, L2_TX_INTRINSIC_GAS(), L2_TX_INTRINSIC_PUBDATA()) @@ -1214,13 +1248,13 @@ object "Bootloader" { ) -> gasLimitForTx, reservedGas { let totalGasLimit := getGasLimit(innerTxDataOffset) - // `MAX_GAS_PER_TRANSACTION` is the amount of gas each transaction + // `MAX_GAS_PER_TRANSACTION` is the amount of gas each transaction // is guaranteed to get, so even if the operator does not trust the account enough, // it is still obligated to provide at least that let operatorTrustedGasLimit := max(MAX_GAS_PER_TRANSACTION(), getOperatorTrustedGasLimitForTx(transactionIndex)) // We remember the amount of gas that is beyond the operator's trust limit to refund it back later. - switch gt(totalGasLimit, operatorTrustedGasLimit) + switch gt(totalGasLimit, operatorTrustedGasLimit) case 0 { reservedGas := 0 } @@ -1240,10 +1274,10 @@ object "Bootloader" { gasLimitForTx := safeSub(totalGasLimit, operatorOverheadForTransaction, "qr") let intrinsicOverhead := safeAdd( - intrinsicGas, + intrinsicGas, // the error messages are trimmed to fit into 32 bytes safeMul(intrinsicPubdata, gasPerPubdata, "qw"), - "fj" + "fj" ) /// /// DEBUG SUPPORT START @@ -1270,7 +1304,7 @@ object "Bootloader" { /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param gasLimitForTx The L2 gas limit for the transaction validation & execution. /// @param gasPrice The L2 gas price that should be used by the transaction. - /// @return ergsLeft The ergs left after the validation step. + /// @return gasLeft The gas left after the validation step. function l2TxValidation( txDataOffset, gasLimitForTx, @@ -1327,9 +1361,9 @@ object "Bootloader" { /// @dev The function responsible for the execution step of the L2 transaction. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. - /// @param ergsLeft The ergs left after the validation step. + /// @param gasLeft The gas left after the validation step. /// @return success Whether or not the execution step was successful. - /// @return ergsSpentOnExecute The ergs spent on the transaction execution. + /// @return gasSpentOnExecute The gas spent on the transaction execution. function l2TxExecution( txDataOffset, gasLeft, @@ -1362,7 +1396,7 @@ object "Bootloader" { mstore(COMPRESSED_BYTECODES_BEGIN_BYTE(), newCompressedFactoryDepsPointer) } - switch gt(gasLeft, gasSpentOnFactoryDeps) + switch gt(gasLeft, gasSpentOnFactoryDeps) case 0 { gasSpentOnExecute := gasLeft gasLeft := 0 @@ -1370,7 +1404,7 @@ object "Bootloader" { default { // Note, that since gt(gasLeft, gasSpentOnFactoryDeps) = true // sub(gasLeft, gasSpentOnFactoryDeps) > 0, which is important - // because a nearCall with 0 ergs passes on all the ergs of the parent frame. + // because a nearCall with 0 gas passes on all the gas of the parent frame. gasLeft := sub(gasLeft, gasSpentOnFactoryDeps) let executeABI := getNearCallABI(gasLeft) @@ -1397,7 +1431,7 @@ object "Bootloader" { notifyExecutionResult(success) } - /// @dev Function responsible for the validation & fee payment step of the transaction. + /// @dev Function responsible for the validation & fee payment step of the transaction. /// @param abi The nearCall ABI. It is implicitly used as gasLimit for the call of this function. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param gasPrice The gasPrice to be used in this transaction. @@ -1409,22 +1443,22 @@ object "Bootloader" { // For the validation step we always use the bootloader as the tx.origin of the transaction setTxOrigin(BOOTLOADER_FORMAL_ADDR()) setGasPrice(gasPrice) - + // Skipping the first 0x20 word of the ABI-encoding let innerTxDataOffset := add(txDataOffset, 32) debugLog("Starting validation", 0) accountValidateTx(txDataOffset) debugLog("Tx validation complete", 1) - + ensurePayment(txDataOffset, gasPrice) - + ret := 1 } /// @dev Function responsible for the execution of the L2 transaction. /// It includes both the call to the `executeTransaction` method of the account - /// and the call to postOp of the account. + /// and the call to postOp of the account. /// @param abi The nearCall ABI. It is implicitly used as gasLimit for the call of this function. /// @param txDataOffset The offset to the ABI-encoded Transaction struct. function ZKSYNC_NEAR_CALL_executeL2Tx( @@ -1440,7 +1474,7 @@ object "Bootloader" { switch isEOA(from) case true { setTxOrigin(from) - } + } default { setTxOrigin(BOOTLOADER_FORMAL_ADDR()) } @@ -1487,7 +1521,7 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) /// Note, that since it is the near call when it panics it reverts the state changes, but it DOES NOT - /// revert the changes in *memory* of the current frame. That is why we do not change the value under + /// revert the changes in *memory* of the current frame. That is why we do not change the value under /// COMPRESSED_BYTECODES_BEGIN_BYTE(), and it is only changed outside of this method. let dataInfoPtr := mload(COMPRESSED_BYTECODES_BEGIN_BYTE()) let factoryDepsPtr := getFactoryDepsPtr(innerTxDataOffset) @@ -1515,8 +1549,8 @@ object "Bootloader" { } // For all the bytecodes that have not been compressed on purpose or due to the inefficiency - // of compressing the entire preimage of the bytecode will be published. - // For bytecodes published in the previous step, no need pubdata will have to be published + // of compressing the entire preimage of the bytecode will be published. + // For bytecodes published in the previous step, no need pubdata will have to be published markFactoryDepsForTx(innerTxDataOffset, false) newDataInfoPtr := dataInfoPtr @@ -1543,13 +1577,13 @@ object "Bootloader" { } - /// @dev Used to refund the current transaction. - /// The gas that this transaction consumes has been already paid in the + /// @dev Used to refund the current transaction. + /// The gas that this transaction consumes has been already paid in the /// process of the validation function refundCurrentL2Transaction( txDataOffset, transactionIndex, - success, + success, gasLeft, gasPrice, reservedGas @@ -1569,8 +1603,9 @@ object "Bootloader" { } default { refundRecipient := paymaster - + if gt(gasLeft, 0) { + checkEnoughGas(gasLeft) let nearCallAbi := getNearCallABI(gasLeft) let gasBeforePostOp := gas() pop(ZKSYNC_NEAR_CALL_callPostOp( @@ -1581,25 +1616,25 @@ object "Bootloader" { success, // Since the paymaster will be refunded with reservedGas, // it should know about it - safeAdd(gasLeft, reservedGas, "jkl"), + safeAdd(gasLeft, reservedGas, "jkl") )) let gasSpentByPostOp := sub(gasBeforePostOp, gas()) - switch gt(gasLeft, gasSpentByPostOp) - case 1 { + switch gt(gasLeft, gasSpentByPostOp) + case 1 { gasLeft := sub(gasLeft, gasSpentByPostOp) } default { gasLeft := 0 } - } + } } askOperatorForRefund(gasLeft) let operatorProvidedRefund := getOperatorRefundForTx(transactionIndex) - // If the operator provides the value that is lower than the one suggested for + // If the operator provides the value that is lower than the one suggested for // the bootloader, we will use the one calculated by the bootloader. let refundInGas := max(operatorProvidedRefund, add(reservedGas, gasLeft)) @@ -1613,10 +1648,10 @@ object "Bootloader" { } let ethToRefund := safeMul( - refundInGas, - gasPrice, + refundInGas, + gasPrice, "fdf" - ) + ) directETHTransfer(ethToRefund, refundRecipient) @@ -1636,7 +1671,7 @@ object "Bootloader" { gas(), ETH_L2_TOKEN_ADDR(), 0, - 0, + 0, 100, 0, 0 @@ -1676,10 +1711,10 @@ object "Bootloader" { if gt(pointer, sub(COMPRESSED_BYTECODES_END_BYTE(), MIN_ALLOWED_OFFSET_FOR_COMPRESSED_BYTES_POINTER())) { assertionError("calldataEncoding too big") } - } + } /// @dev It is expected that the pointer at the COMPRESSED_BYTECODES_BEGIN_BYTE() - /// stores the position of the current bytecodeHash + /// stores the position of the current bytecodeHash function sendCompressedBytecode(dataInfoPtr, bytecodeHash) -> ret { // Storing the right selector, ensuring that the operator cannot manipulate it mstore(add(dataInfoPtr, 32), {{PUBLISH_COMPRESSED_BYTECODE_SELECTOR}}) @@ -1706,8 +1741,8 @@ object "Bootloader" { checkOffset(nextAfterCalldata) let totalLen := safeSub(nextAfterCalldata, calldataPtr, "xqwf") - - // Note, that it is safe because the + + // Note, that it is safe because the let success := call( gas(), BYTECODE_COMPRESSOR_ADDR(), @@ -1729,7 +1764,7 @@ object "Bootloader" { let returnedBytecodeHash := mload(0) // If the bytecode hash calculated on the bytecode compressor's side - // is not equal to the one provided by the operator means that the operator is + // is not equal to the one provided by the operator means that the operator is // malicious and we should revert the batch altogether if iszero(eq(returnedBytecodeHash, bytecodeHash)) { assertionError("bytecodeHash incorrect") @@ -1741,7 +1776,7 @@ object "Bootloader" { /// @dev Get checked for overcharged operator's overhead for the transaction. /// @param transactionIndex The index of the transaction in the batch /// @param txTotalGasLimit The total gass limit of the transaction (including the overhead). - /// @param gasPerPubdataByte The price for pubdata byte in ergs. + /// @param gasPerPubdataByte The price for pubdata byte in gas. /// @param txEncodeLen The length of the ABI-encoding of the transaction function getVerifiedOperatorOverheadForTx( transactionIndex, @@ -1841,15 +1876,15 @@ object "Bootloader" { precompileCall(gas()) } - /// @dev Executes the `precompileCall` opcode. + /// @dev Executes the `precompileCall` opcode. /// Since the bootloader has no implicit meaning for this opcode, /// this method just burns gas. function precompileCall(gasToBurn) { - // We don't care about the return value, since it is a opcode simulation + // We don't care about the return value, since it is a opcode simulation // and the return value doesn't have any meaning. let ret := verbatim_2i_1o("precompile", 0, gasToBurn) } - + /// @dev Returns the pointer to the latest returndata. function returnDataPtr() -> ret { ret := verbatim_0i_1o("get_global::ptr_return_data") @@ -1865,7 +1900,7 @@ object "Bootloader" { let innerTxDataOffset := add(txDataOffset, 32) let to := getTo(innerTxDataOffset) let from := getFrom(innerTxDataOffset) - + debugLog("from: ", from) debugLog("to: ", to) @@ -1879,7 +1914,7 @@ object "Bootloader" { let dataPtr := getDataPtr(innerTxDataOffset) markFactoryDepsForTx(innerTxDataOffset, false) - + let value := getValue(innerTxDataOffset) let success := msgValueSimulatorMimicCall( @@ -1900,7 +1935,7 @@ object "Bootloader" { mstore(resultPtr, success) // Store results of the call in the memory. - if success { + if success { let returnsize := returndatasize() returndatacopy(0,0,returnsize) return(0,returnsize) @@ -1909,6 +1944,37 @@ object "Bootloader" { } + /// @dev Given the callee and the data to be called with, + /// this function returns whether the mimicCall should use the `isSystem` flag. + /// This flag should only be used for contract deployments and nothing else. + /// @param to The callee of the call. + /// @param dataPtr The pointer to the calldata of the transaction. + function shouldMsgValueMimicCallBeSystem(to, dataPtr) -> ret { + let dataLen := mload(dataPtr) + // Note, that this point it is not fully known whether it is indeed the selector + // of the calldata (it might not be the case if the `dataLen` < 4), but it will be checked later on + let selector := shr(224, mload(add(dataPtr, 32))) + + let isSelectorCreate := or( + eq(selector, {{CREATE_SELECTOR}}), + eq(selector, {{CREATE_ACCOUNT_SELECTOR}}) + ) + let isSelectorCreate2 := or( + eq(selector, {{CREATE2_SELECTOR}}), + eq(selector, {{CREATE2_ACCOUNT_SELECTOR}}) + ) + + // Firstly, ensure that the selector is a valid deployment function + ret := or( + isSelectorCreate, + isSelectorCreate2 + ) + // Secondly, ensure that the callee is ContractDeployer + ret := and(ret, eq(to, CONTRACT_DEPLOYER_ADDR())) + // Thirdly, ensure that the calldata is long enough to contain the selector + ret := and(ret, gt(dataLen, 3)) + } + /// @dev Given the pointer to the calldata, the value and to /// performs the call through the msg.value simulator. /// @param to Which contract to call @@ -1918,11 +1984,11 @@ object "Bootloader" { /// the length of the calldata and the calldata itself right afterwards. function msgValueSimulatorMimicCall(to, from, value, dataPtr) -> success { // Only calls to the deployer system contract are allowed to be system - let isSystem := eq(to, CONTRACT_DEPLOYER_ADDR()) + let isSystem := shouldMsgValueMimicCallBeSystem(to, dataPtr) success := mimicCallOnlyResult( MSG_VALUE_SIMULATOR_ADDR(), - from, + from, dataPtr, 0, 1, @@ -1933,13 +1999,13 @@ object "Bootloader" { } /// @dev Checks whether the current frame has enough gas - /// @dev It does not use 63/64 rule and should only be called before nearCalls. + /// @dev It does not use 63/64 rule and should only be called before nearCalls. function checkEnoughGas(gasToProvide) { debugLog("gas()", gas()) debugLog("gasToProvide", gasToProvide) // Using margin of CHECK_ENOUGH_GAS_OVERHEAD gas to make sure that the operation will indeed - // have enough gas + // have enough gas if lt(gas(), safeAdd(gasToProvide, CHECK_ENOUGH_GAS_OVERHEAD(), "cjq")) { revertWithReason(NOT_ENOUGH_GAS_PROVIDED_ERR_CODE(), 0) } @@ -1952,14 +2018,14 @@ object "Bootloader" { let l1GasPerPubdata := L1_GAS_PER_PUBDATA_BYTE() // Since the user specifies the amount of gas he is willing to pay for a *byte of pubdata*, - // we need to convert the number of L1 gas needed to process the batch into the equivalent number of + // we need to convert the number of L1 gas needed to process the batch into the equivalent number of // pubdata to pay for. // The difference between ceil and floor division here is negligible, // so we prefer doing the cheaper operation for the end user let pubdataEquivalentForL1Gas := safeDiv(l1GasOverhead, l1GasPerPubdata, "dd") - + ret := safeAdd( - computationOverhead, + computationOverhead, safeMul(gasPerPubdata, pubdataEquivalentForL1Gas, "aa"), "ab" ) @@ -1975,11 +2041,11 @@ object "Bootloader" { /// @param txEncodeLen The length of the ABI-encoding of the transaction /// @dev The % following 3 resources is taken into account when calculating the % of the batch's overhead to pay. /// 1. The % of the maximal gas per transaction. It is assumed that `MAX_GAS_PER_TRANSACTION` gas is enough to consume all - /// the single-instance circuits. Meaning that the transaction should pay at least txGasLimit/MAX_GAS_PER_TRANSACTION part + /// the single-instance circuits. Meaning that the transaction should pay at least txGasLimit/MAX_GAS_PER_TRANSACTION part /// of the overhead. /// 2. Overhead for taking up the bootloader memory. The bootloader memory has a cap on its length, mainly enforced to keep the RAM requirements /// for the node smaller. That is, the user needs to pay a share proportional to the length of the ABI encoding of the transaction. - /// 3. Overhead for taking up a slot for the transaction. Since each batch has the limited number of transactions in it, the user must pay + /// 3. Overhead for taking up a slot for the transaction. Since each batch has the limited number of transactions in it, the user must pay /// at least 1/MAX_TRANSACTIONS_IN_BATCH part of the overhead. function getTransactionUpfrontOverhead( txGasLimit, @@ -1997,7 +2063,7 @@ object "Bootloader" { ret := max(ret, overheadForCircuits) debugLog("overheadForCircuits", overheadForCircuits) - + let overheadForLength := ceilDiv( safeMul(txEncodeLen, totalBatchOverhead, "ad"), BOOTLOADER_MEMORY_FOR_TXS() @@ -2005,14 +2071,14 @@ object "Bootloader" { ret := max(ret, overheadForLength) debugLog("overheadForLength", overheadForLength) - + let overheadForSlot := ceilDiv( totalBatchOverhead, MAX_TRANSACTIONS_IN_BATCH() ) ret := max(ret, overheadForSlot) debugLog("overheadForSlot", overheadForSlot) - + /// /// DEBUG SUPPORT START /// @@ -2027,13 +2093,13 @@ object "Bootloader" { /// // In the proved batch we ensure that the gasPerPubdataByte is not zero - // to avoid the potential edge case of division by zero. In Yul, division by + // to avoid the potential edge case of division by zero. In Yul, division by // zero does not panic, but returns zero. if and(iszero(gasPerPubdataByte), FORBID_ZERO_GAS_PER_PUBDATA()) { assertionError("zero gasPerPubdataByte") } - + } /// @dev A method where all panics in the nearCalls get to. @@ -2042,16 +2108,16 @@ object "Bootloader" { debugLog("ZKSYNC_CATCH_NEAR_CALL",0) setHook(VM_HOOK_CATCH_NEAR_CALL()) } - + /// @dev Prepends the selector before the txDataOffset, /// preparing it to be used to call either `verify` or `execute`. /// Returns the pointer to the calldata. /// Note, that this overrides 32 bytes before the current transaction: function prependSelector(txDataOffset, selector) -> ret { - + let calldataPtr := sub(txDataOffset, 4) - // Note, that since `mstore` stores 32 bytes at once, we need to - // actually store the selector in one word starting with the + // Note, that since `mstore` stores 32 bytes at once, we need to + // actually store the selector in one word starting with the // (txDataOffset - 32) = (calldataPtr - 28) mstore(sub(calldataPtr, 28), selector) @@ -2110,7 +2176,7 @@ object "Bootloader" { } // This method returns AccountAbstractVersion enum. - // Currently only two versions are supported: 1 or 0, which basically + // Currently only two versions are supported: 1 or 0, which basically // mean whether the contract is an account or not. if iszero(supportedVersion) { revertWithReason( @@ -2161,16 +2227,16 @@ object "Bootloader" { } /// @dev Used to call a method with the following signature; - /// someName( + /// someName( /// bytes32 _txHash, - /// bytes32 _suggestedSignedHash, + /// bytes32 _suggestedSignedHash, /// Transaction calldata _transaction /// ) - // Note, that this method expects that the current tx hashes are already stored + // Note, that this method expects that the current tx hashes are already stored // in the `CURRENT_L2_TX_HASHES` slots. function callAccountMethod(selector, account, txDataOffset) -> success { - // Safety invariant: it is safe to override data stored under - // `txDataOffset`, since the account methods are called only using + // Safety invariant: it is safe to override data stored under + // `txDataOffset`, since the account methods are called only using // `callAccountMethod` or `callPostOp` methods, both of which reformat // the contents before innerTxDataOffset (i.e. txDataOffset + 32 bytes), // i.e. make sure that the position at the txDataOffset has valid value. @@ -2250,7 +2316,7 @@ object "Bootloader" { /// @param paymaster The address of the paymaster /// @param txDataOffset The offset to the ABI-encoded Transaction struct. /// @param txResult The status of the transaction (1 if succeeded, 0 otherwise). - /// @param maxRefundedGas The maximum number of gas the bootloader can be refunded. + /// @param maxRefundedGas The maximum number of gas the bootloader can be refunded. /// This is the `maximum` number because it does not take into account the number of gas that /// can be spent by the paymaster itself. function ZKSYNC_NEAR_CALL_callPostOp(abi, paymaster, txDataOffset, txResult, maxRefundedGas) -> success { @@ -2272,7 +2338,7 @@ object "Bootloader" { // 6. _maxRefundedGas (32 bytes) // 7. _context (note, that the content must be padded to 32 bytes) // 8. _transaction - + let contextLen := mload(PAYMASTER_CONTEXT_BEGIN_BYTE()) let paddedContextLen := lengthRoundedByWords(contextLen) // The length of selector + the first 7 fields (with context len) + context itself. @@ -2287,11 +2353,11 @@ object "Bootloader" { // Selector mstore(ptr, {{RIGHT_PADDED_POST_TRANSACTION_SELECTOR}}) ptr := add(ptr, 4) - + // context ptr mstore(ptr, 192) // The context always starts at 32 * 6 position ptr := add(ptr, 32) - + // transaction ptr mstore(ptr, sub(innerTxDataOffset, add(calldataPtr, 4))) ptr := add(ptr, 32) @@ -2316,18 +2382,18 @@ object "Bootloader" { memCopy(PAYMASTER_CONTEXT_BEGIN_BYTE(), ptr, add(32, paddedContextLen)) ptr := add(ptr, add(32, paddedContextLen)) - // At this point, the ptr should reach the innerTxDataOffset. + // At this point, the ptr should reach the innerTxDataOffset. // If not, we have done something wrong here. if iszero(eq(ptr, innerTxDataOffset)) { assertionError("postOp: ptr != innerTxDataOffset") } - + // no need to store the transaction as from the innerTxDataOffset starts // valid encoding of the transaction } let calldataLen := safeAdd(preTxLen, getDataLength(innerTxDataOffset), "jiq") - + success := call( gas(), paymaster, @@ -2349,7 +2415,7 @@ object "Bootloader" { let finalFrom := safeAdd(from, len, "cka") - for { } lt(from, finalFrom) { + for { } lt(from, finalFrom) { from := add(from, 32) to := add(to, 32) } { @@ -2395,8 +2461,8 @@ object "Bootloader" { /// correct returndatasize function ensureCorrectAccountMagic() { // It is expected that the returned value is ABI-encoded bytes4 magic value - // The Solidity always pads such value to 32 bytes and so we expect the magic to be - // of length 32 + // The Solidity always pads such value to 32 bytes and so we expect the magic to be + // of length 32 if iszero(eq(32, returndatasize())) { revertWithReason( ACCOUNT_RETURNED_INVALID_MAGIC_ERR_CODE(), @@ -2406,7 +2472,7 @@ object "Bootloader" { // Note that it is important to copy the magic even though it is not needed if the // `SHOULD_ENSURE_CORRECT_RETURNED_MAGIC` is false. It is never false in production - // but it is so in fee estimation and we want to preserve as many operations as + // but it is so in fee estimation and we want to preserve as many operations as // in the original operation. returndatacopy(0, 0, 32) let returnedValue := mload(0) @@ -2420,13 +2486,13 @@ object "Bootloader" { } } - /// @dev Calls the KnownCodesStorage system contract to mark the factory dependencies of + /// @dev Calls the KnownCodesStorage system contract to mark the factory dependencies of /// the transaction as known. function markFactoryDepsForTx(innerTxDataOffset, isL1Tx) { debugLog("starting factory deps", 0) let factoryDepsPtr := getFactoryDepsPtr(innerTxDataOffset) let factoryDepsLength := mload(factoryDepsPtr) - + if gt(factoryDepsLength, MAX_NEW_FACTORY_DEPS()) { assertionError("too many factory deps") } @@ -2452,7 +2518,7 @@ object "Bootloader" { let arrayLengthBytes := safeAdd(32, safeMul(factoryDepsLength, 32, "ag"), "af") // Copying factory deps array memCopy(factoryDepsPtr, ptr, arrayLengthBytes) - + let success := call( gas(), KNOWN_CODES_CONTRACT_ADDR(), @@ -2469,7 +2535,7 @@ object "Bootloader" { if iszero(success) { debugReturndata() - switch isL1Tx + switch isL1Tx case 1 { revertWithReason( FAILED_TO_MARK_FACTORY_DEPS(), @@ -2490,7 +2556,7 @@ object "Bootloader" { let value := getValue(innerTxDataOffset) debugLog("value", value) let dataPtr := getDataPtr(innerTxDataOffset) - + let dataLength := mload(dataPtr) let data := add(dataPtr, 32) @@ -2506,11 +2572,11 @@ object "Bootloader" { } } - /// @dev Function responsible for the execution of the L2 transaction + /// @dev Function responsible for the execution of the L2 transaction /// @dev Returns `true` or `false` depending on whether or not the tx has reverted. function executeL2Tx(txDataOffset, from) -> ret { ret := callAccountMethod({{EXECUTE_TX_SELECTOR}}, from, txDataOffset) - + if iszero(ret) { debugReturndata() } @@ -2520,12 +2586,12 @@ object "Bootloader" { /// zkSync-specific utilities: /// - /// @dev Returns an ABI that can be used for low-level + /// @dev Returns an ABI that can be used for low-level /// invocations of calls and mimicCalls /// @param dataPtr The pointer to the calldata. /// @param gasPassed The number of gas to be passed with the call. /// @param shardId The shard id of the callee. Currently only `0` (Rollup) is supported. - /// @param forwardingMode The mode of how the calldata is forwarded + /// @param forwardingMode The mode of how the calldata is forwarded /// It is possible to either pass a pointer, slice of auxheap or heap. For the /// bootloader purposes using heap (0) is enough. /// @param isConstructorCall Whether the call should contain the isConstructor flag. @@ -2583,9 +2649,9 @@ object "Bootloader" { isSystemCall ) - ret := verbatim_7i_1o("system_mimic_call", to, whoToMimic, farCallAbi, extraAbi1, extraAbi2, extraAbi3, 0) + ret := verbatim_7i_1o("system_mimic_call", to, whoToMimic, farCallAbi, extraAbi1, extraAbi2, extraAbi3, 0) } - + // Extracts the required byte from the 32-byte word. // 31 would mean the MSB, 0 would mean LSB. @@ -2682,7 +2748,7 @@ object "Bootloader" { ) if iszero(success) { - debugLog("Failed publish timestamp data to L1", 0) + debugLog("Failed publish timestamp to L1", 0) revertWithReason(FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1(), 1) } } @@ -2708,7 +2774,7 @@ object "Bootloader" { revertWithReason(FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE(), 1) } } - + /// @dev Increment the number of txs in the batch function considerNewTx() { verbatim_0i_0o("increment_tx_counter") @@ -2726,7 +2792,7 @@ object "Bootloader" { let success := setContextVal({{RIGHT_PADDED_SET_TX_ORIGIN}}, newTxOrigin) if iszero(success) { - debugLog("Failed to set txOrigin", newTxOrigin) + debugLog("Failed to set txOrigin", newTxOrigin) nearCallPanic() } } @@ -2813,10 +2879,10 @@ object "Bootloader" { } } - /// @notice Appends the transaction hash to the current L2 block. + /// @notice Appends the transaction hash to the current L2 block. /// @param txHash The hash of the transaction to append. /// @param isL1Tx Whether the transaction is an L1 transaction. If it is an L1 transaction, - /// and this method fails, then the bootloader execution will be explicitly reverted. + /// and this method fails, then the bootloader execution will be explicitly reverted. /// Otherwise, the nearCallPanic will be used to implicitly fail the validation of the transaction. function appendTransactionHash( txHash, @@ -2847,8 +2913,8 @@ object "Bootloader" { ) } default { - // For L2 transactions, we use near call panic, it will triger the validation - // step of the transaction to fail, returning a consistent error message. + // For L2 transactions, we use near call panic, it will triger the validation + // step of the transaction to fail, returning a consistent error message. nearCallPanic() } } @@ -2856,7 +2922,7 @@ object "Bootloader" { /// @notice Arbitrarily overrides the current batch information. - /// @dev It should NOT be available in the proved batch. + /// @dev It should NOT be available in the proved batch. function unsafeOverrideBatch(newTimestamp, newBatchNumber, baseFee) { mstore(0, {{RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR}}) mstore(4, newTimestamp) @@ -2883,7 +2949,7 @@ object "Bootloader" { - // Checks whether the nonce `nonce` have been already used for + // Checks whether the nonce `nonce` have been already used for // account `from`. Reverts if the nonce has not been used properly. function ensureNonceUsage(from, nonce, shouldNonceBeUsed) { // INonceHolder.validateNonceUsage selector @@ -2939,15 +3005,15 @@ object "Bootloader" { // uint256 from; // // The callee. // uint256 to; - // // The gasLimit to pass with the transaction. + // // The gasLimit to pass with the transaction. // // It has the same meaning as Ethereum's gasLimit. // uint256 gasLimit; // // The maximum amount of gas the user is willing to pay for a byte of pubdata. // uint256 gasPerPubdataByteLimit; - // // The maximum fee per gas that the user is willing to pay. + // // The maximum fee per gas that the user is willing to pay. // // It is akin to EIP1559's maxFeePerGas. // uint256 maxFeePerGas; - // // The maximum priority fee per gas that the user is willing to pay. + // // The maximum priority fee per gas that the user is willing to pay. // // It is akin to EIP1559's maxPriorityFeePerGas. // uint256 maxPriorityFeePerGas; // // The transaction's paymaster. If there is no paymaster, it is equal to 0. @@ -2980,15 +3046,15 @@ object "Bootloader" { // bytes reservedDynamic; // } - /// @notice Asserts the equality of two values and reverts + /// @notice Asserts the equality of two values and reverts /// with the appropriate error message in case it doesn't hold /// @param value1 The first value of the assertion /// @param value2 The second value of the assertion /// @param message The error message function assertEq(value1, value2, message) { - switch eq(value1, value2) + switch eq(value1, value2) case 0 { assertionError(message) } - default { } + default { } } /// @notice Makes sure that the structure of the transaction is set in accordance to its type @@ -3016,8 +3082,8 @@ object "Bootloader" { - - // Here, for type 0 transactions the reserved0 field is used as a marker + + // Here, for type 0 transactions the reserved0 field is used as a marker // whether the transaction should include chainId in its encoding. assertEq(lte(getGasPerPubdataByteLimit(innerTxDataOffset), MAX_L2_GAS_PER_PUBDATA()), 1, "Gas per pubdata is wrong") assertEq(getPaymaster(innerTxDataOffset), 0, "paymaster non zero") @@ -3038,7 +3104,7 @@ object "Bootloader" { let maxFeePerGas := getMaxFeePerGas(innerTxDataOffset) let maxPriorityFeePerGas := getMaxPriorityFeePerGas(innerTxDataOffset) assertEq(maxFeePerGas, maxPriorityFeePerGas, "EIP1559 params wrong") - + let from := getFrom(innerTxDataOffset) @@ -3048,7 +3114,7 @@ object "Bootloader" { - + assertEq(lte(getGasPerPubdataByteLimit(innerTxDataOffset), MAX_L2_GAS_PER_PUBDATA()), 1, "Gas per pubdata is wrong") assertEq(getPaymaster(innerTxDataOffset), 0, "paymaster non zero") @@ -3075,11 +3141,12 @@ object "Bootloader" { let iseoa := isEOA(from) assertEq(iseoa, true, "Only EIP-712 can use non-EOA") + - - + + assertEq(gt(getFrom(innerTxDataOffset), MAX_SYSTEM_CONTRACT_ADDR()), 1, "from in kernel space") @@ -3092,7 +3159,7 @@ object "Bootloader" { assertEq(getFactoryDepsBytesLength(innerTxDataOffset), 0, "factory deps non zero") assertEq(getPaymasterInputBytesLength(innerTxDataOffset), 0, "paymasterInput non zero") } - case 113 { + case 113 { let paymaster := getPaymaster(innerTxDataOffset) assertEq(or(gt(paymaster, MAX_SYSTEM_CONTRACT_ADDR()), iszero(paymaster)), 1, "paymaster in kernel space") @@ -3117,125 +3184,125 @@ object "Bootloader" { case 255 { // Double-check that the operator doesn't try to do an upgrade transaction via L1 -> L2 transaction. assertEq(gt(getFrom(innerTxDataOffset), MAX_SYSTEM_CONTRACT_ADDR()), 1, "from in kernel space") - // L1 transaction, no need to validate as it is validated on L1. + // L1 transaction, no need to validate as it is validated on L1. } default { assertionError("Unknown tx type") } } - /// + /// /// TransactionData utilities - /// + /// /// @dev The next methods are programmatically generated /// function getTxType(innerTxDataOffset) -> ret { ret := mload(innerTxDataOffset) } - + function getFrom(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 32)) } - + function getTo(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 64)) } - + function getGasLimit(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 96)) } - + function getGasPerPubdataByteLimit(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 128)) } - + function getMaxFeePerGas(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 160)) } - + function getMaxPriorityFeePerGas(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 192)) } - + function getPaymaster(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 224)) } - + function getNonce(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 256)) } - + function getValue(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 288)) } - + function getReserved0(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 320)) } - + function getReserved1(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 352)) } - + function getReserved2(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 384)) } - + function getReserved3(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 416)) } - + function getDataPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 448)) ret := add(innerTxDataOffset, ret) } - + function getDataBytesLength(innerTxDataOffset) -> ret { let ptr := getDataPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getSignaturePtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 480)) ret := add(innerTxDataOffset, ret) } - + function getSignatureBytesLength(innerTxDataOffset) -> ret { let ptr := getSignaturePtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getFactoryDepsPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 512)) ret := add(innerTxDataOffset, ret) } - + function getFactoryDepsBytesLength(innerTxDataOffset) -> ret { let ptr := getFactoryDepsPtr(innerTxDataOffset) ret := safeMul(mload(ptr),32, "fwop") } - + function getPaymasterInputPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 544)) ret := add(innerTxDataOffset, ret) } - + function getPaymasterInputBytesLength(innerTxDataOffset) -> ret { let ptr := getPaymasterInputPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + function getReservedDynamicPtr(innerTxDataOffset) -> ret { ret := mload(add(innerTxDataOffset, 576)) ret := add(innerTxDataOffset, ret) } - + function getReservedDynamicBytesLength(innerTxDataOffset) -> ret { let ptr := getReservedDynamicPtr(innerTxDataOffset) ret := lengthRoundedByWords(mload(ptr)) } - + /// This method checks that the transaction's structure is correct /// and tightly packed function validateAbiEncoding(txDataOffset) -> ret { @@ -3249,17 +3316,17 @@ object "Bootloader" { if iszero(validateAddress(fromValue)) { assertionError("Encoding from") } - + let toValue := getTo(innerTxDataOffset) if iszero(validateAddress(toValue)) { assertionError("Encoding to") } - + let gasLimitValue := getGasLimit(innerTxDataOffset) if iszero(validateUint32(gasLimitValue)) { assertionError("Encoding gasLimit") } - + let gasPerPubdataByteLimitValue := getGasPerPubdataByteLimit(innerTxDataOffset) if iszero(validateUint32(gasPerPubdataByteLimitValue)) { assertionError("Encoding gasPerPubdataByteLimit") @@ -3274,26 +3341,26 @@ object "Bootloader" { if iszero(validateUint128(maxPriorityFeePerGas)) { assertionError("Encoding maxPriorityFeePerGas") } - + let paymasterValue := getPaymaster(innerTxDataOffset) if iszero(validateAddress(paymasterValue)) { assertionError("Encoding paymaster") } let expectedDynamicLenPtr := add(innerTxDataOffset, 608) - + let dataLengthPos := getDataPtr(innerTxDataOffset) if iszero(eq(dataLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding data") } expectedDynamicLenPtr := validateBytes(dataLengthPos) - + let signatureLengthPos := getSignaturePtr(innerTxDataOffset) if iszero(eq(signatureLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding signature") } expectedDynamicLenPtr := validateBytes(signatureLengthPos) - + let factoryDepsLengthPos := getFactoryDepsPtr(innerTxDataOffset) if iszero(eq(factoryDepsLengthPos, expectedDynamicLenPtr)) { assertionError("Encoding factoryDeps") @@ -3321,17 +3388,17 @@ object "Bootloader" { // in bytes. ret := 768 - ret := safeAdd(ret, getDataBytesLength(innerTxDataOffset), "asx") + ret := safeAdd(ret, getDataBytesLength(innerTxDataOffset), "asx") ret := safeAdd(ret, getSignatureBytesLength(innerTxDataOffset), "qwqa") ret := safeAdd(ret, getFactoryDepsBytesLength(innerTxDataOffset), "sic") ret := safeAdd(ret, getPaymasterInputBytesLength(innerTxDataOffset), "tpiw") ret := safeAdd(ret, getReservedDynamicBytesLength(innerTxDataOffset), "shy") } - /// + /// /// End of programmatically generated code /// - + /// @dev Accepts an address and returns whether or not it is /// a valid address function validateAddress(addr) -> ret { @@ -3363,14 +3430,14 @@ object "Bootloader" { let lastWordBytes := mod(length, 32) switch lastWordBytes - case 0 { - // If the length is divisible by 32, then + case 0 { + // If the length is divisible by 32, then // the bytes occupy whole words, so there is // nothing to validate - bytesEnd := safeAdd(bytesPtr, safeAdd(length, 32, "pol"), "aop") + bytesEnd := safeAdd(bytesPtr, safeAdd(length, 32, "pol"), "aop") } default { - // If the length is not divisible by 32, then + // If the length is not divisible by 32, then // the last word is padded with zeroes, i.e. // the last 32 - `lastWordBytes` bytes must be zeroes // The easiest way to check this is to use AND operator @@ -3392,8 +3459,8 @@ object "Bootloader" { } } - /// @dev Accepts the pointer to the bytes32[] array length and - /// returns the pointer right after the array's content + /// @dev Accepts the pointer to the bytes32[] array length and + /// returns the pointer right after the array's content function validateBytes32Array(arrayPtr) -> arrayEnd { // The bytes32[] array takes full words which may contain any content. // Thus, there is nothing to validate. @@ -3436,7 +3503,7 @@ object "Bootloader" { } } - /// @dev Returns the addition of two unsigned integers, reverting on overflow. + /// @dev Returns the subtraction of two unsigned integers, reverting on underflow. function safeSub(x, y, errMsg) -> ret { if gt(y, x) { assertionError(errMsg) @@ -3449,7 +3516,7 @@ object "Bootloader" { /// /// @notice A method used to prevent optimization of x by the compiler - /// @dev This method is only used for logging purposes + /// @dev This method is only used for logging purposes function nonOptimized(x) -> ret { // value() is always 0 in bootloader context. ret := add(mul(callvalue(),x),x) @@ -3466,7 +3533,7 @@ object "Bootloader" { /// @dev Triggers a hook that displays the returndata on the server side. function debugReturndata() { debugLog("returndataptr", returnDataPtr()) - storeVmHookParam(0, returnDataPtr()) + storeVmHookParam(0, returnDataPtr()) setHook(VM_HOOK_DEBUG_RETURNDATA()) } @@ -3474,7 +3541,7 @@ object "Bootloader" { /// refunded to the user. This is to be used by the operator to derive the correct /// `gasUsed` in the API. function notifyAboutRefund(refund) { - storeVmHookParam(0, nonOptimized(refund)) + storeVmHookParam(0, nonOptimized(refund)) setHook(VM_NOTIFY_OPERATOR_ABOUT_FINAL_REFUND()) debugLog("refund(gas)", refund) } @@ -3490,10 +3557,10 @@ object "Bootloader" { } /// @dev Asks operator for the refund for the transaction. The function provides - /// the operator with the leftover gas found by the bootloader. + /// the operator with the leftover gas found by the bootloader. /// This function is called before the refund stage, because at that point /// only the operator knows how close does a transaction - /// bring us to closing the batch as well as how much the transaction + /// bring us to closing the batch as well as how much the transaction /// should've spent on the pubdata/computation/etc. /// After it is run, the operator should put the expected refund /// into the memory slot (in the out of circuit execution). @@ -3503,10 +3570,10 @@ object "Bootloader" { storeVmHookParam(0, nonOptimized(gasLeft)) setHook(VM_HOOK_ASK_OPERATOR_FOR_REFUND()) } - - /// + + /// /// Error codes used for more correct diagnostics from the server side. - /// + /// function ETH_CALL_ERR_CODE() -> ret { ret := 0 @@ -3612,19 +3679,19 @@ object "Bootloader" { ret := 25 } - function L1_MESSENGER_PUBLISHING_FAILED_ERR_CODE() -> ret { + function FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1() -> ret { ret := 26 } - function L1_MESSENGER_LOG_SENDING_FAILED_ERR_CODE() -> ret { + function L1_MESSENGER_PUBLISHING_FAILED_ERR_CODE() -> ret { ret := 27 } - function FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE() -> ret { + function L1_MESSENGER_LOG_SENDING_FAILED_ERR_CODE() -> ret { ret := 28 } - function FAILED_TO_PUBLISH_TIMESTAMP_DATA_TO_L1() -> ret { + function FAILED_TO_CALL_SYSTEM_CONTEXT_ERR_CODE() -> ret { ret := 29 } @@ -3632,14 +3699,14 @@ object "Bootloader" { /// @param str A string literal function getStrLen(str) -> len { len := 0 - // The string literals are stored left-aligned. Thus, + // The string literals are stored left-aligned. Thus, // In order to get the length of such string, - // we shift it to the left (remove one byte to the left) until + // we shift it to the left (remove one byte to the left) until // no more non-empty bytes are left. for {} str {str := shl(8, str)} { len := add(len, 1) } - } + } // Selector of the errors used by the "require" statements in Solidity // and the one that can be parsed by our server. @@ -3655,19 +3722,19 @@ object "Bootloader" { mstore8(ptr, ASSERTION_ERROR()) ptr := add(ptr, 1) - // Then, we need to put the returndata in a way that is easily parsable by our + // Then, we need to put the returndata in a way that is easily parsable by our // servers mstore(ptr, GENERAL_ERROR_SELECTOR()) ptr := add(ptr, 4) - + // Then, goes the "data offset". It is has constant value of 32. mstore(ptr, 32) ptr := add(ptr, 32) - + // Then, goes the length of the string: mstore(ptr, getStrLen(err)) ptr := add(ptr, 32) - + // Then, we put the actual string mstore(ptr, err) ptr := add(ptr, 32) @@ -3677,8 +3744,8 @@ object "Bootloader" { /// @notice Accepts an error code and whether there is a need to copy returndata /// @param errCode The code of the error - /// @param sendReturnData A flag of whether or not the returndata should be used in the - /// revert reason as well. + /// @param sendReturnData A flag of whether or not the returndata should be used in the + /// revert reason as well. function revertWithReason(errCode, sendReturnData) { let returndataLen := 1 mstore8(0, errCode) @@ -3692,8 +3759,8 @@ object "Bootloader" { revert(0, returndataLen) } - /// @notice The id of the VM hook that notifies the operator that the transaction - /// validation rules should start applying (i.e. the user should not be allowed to access + /// @notice The id of the VM hook that notifies the operator that the transaction + /// validation rules should start applying (i.e. the user should not be allowed to access /// other users' storage, etc). function VM_HOOK_ACCOUNT_VALIDATION_ENTERED() -> ret { ret := 0 @@ -3705,14 +3772,14 @@ object "Bootloader" { ret := 1 } - /// @notice The id of the VM hook that notifies the operator that the transaction's validation - /// restrictions should no longer apply. Note, that this is different from the validation ending, + /// @notice The id of the VM hook that notifies the operator that the transaction's validation + /// restrictions should no longer apply. Note, that this is different from the validation ending, /// since for instance the bootloader needs to do some actions during validation which are forbidden for users. /// So this hook is used to notify the operator that the restrictions should be temporarily lifted. function VM_HOOK_NO_VALIDATION_ENTERED() -> ret { ret := 2 } - + /// @notice The id of the VM hook that notifies the operator that the transaction's validation has ended. function VM_HOOK_VALIDATION_STEP_ENDED() -> ret { ret := 3 @@ -3738,8 +3805,8 @@ object "Bootloader" { function VM_HOOK_CATCH_NEAR_CALL() -> ret { ret := 7 } - - /// @notice The id of the VM hook that is used to notify the operator about the need to put the refund for + + /// @notice The id of the VM hook that is used to notify the operator about the need to put the refund for /// the current transaction into the bootloader's memory. function VM_HOOK_ASK_OPERATOR_FOR_REFUND() -> ret { ret := 8 @@ -3766,17 +3833,17 @@ object "Bootloader" { ret := 12 } - // Need to prevent the compiler from optimizing out similar operations, - // which may have different meaning for the offline debugging + // Need to prevent the compiler from optimizing out similar operations, + // which may have different meaning for the offline debugging function unoptimized(val) -> ret { ret := add(val, callvalue()) } - /// @notice Triggers a VM hook. + /// @notice Triggers a VM hook. /// The server will recognize it and output corresponding logs. function setHook(hook) { mstore(VM_HOOK_PTR(), unoptimized(hook)) - } + } /// @notice Sets a value to a param of the vm hook. /// @param paramId The id of the VmHook parameter. @@ -3829,13 +3896,13 @@ object "Bootloader" { /// For now, this value is trusted to be fairly provided by the operator. let L1_GAS_PRICE := mload(128) - /// @notice The minimal gas price that the operator agrees upon. + /// @notice The minimal gas price that the operator agrees upon. /// In the future, it will have an EIP1559-like lower bound. let FAIR_L2_GAS_PRICE := mload(160) /// @notice The expected base fee by the operator. /// Just like the batch number, while calculated on the bootloader side, - /// the operator still provides it to make sure that its data is in sync. + /// the operator still provides it to make sure that its data is in sync. let EXPECTED_BASE_FEE := mload(192) validateOperatorProvidedPrices(L1_GAS_PRICE, FAIR_L2_GAS_PRICE) @@ -3844,7 +3911,12 @@ object "Bootloader" { - // Only for the proved batch we enforce that the baseFee proposed + // This implementation of the bootloader relies on the correct version of the SystemContext + // and it can not be upgraded via a standard upgrade transaction, but needs to ensure + // correctness itself before any transaction is executed. + upgradeSystemContextIfNeeded() + + // Only for the proved batch we enforce that the baseFee proposed // by the operator is equal to the expected one. For the playground batch, we allow // the operator to provide any baseFee the operator wants. baseFee, GAS_PRICE_PER_PUBDATA := getBaseFee(L1_GAS_PRICE, FAIR_L2_GAS_PRICE) @@ -3864,6 +3936,8 @@ object "Bootloader" { let SHOULD_SET_NEW_BATCH := mload(224) + upgradeSystemContextIfNeeded() + switch SHOULD_SET_NEW_BATCH case 0 { unsafeOverrideBatch(NEW_BATCH_TIMESTAMP, NEW_BATCH_NUMBER, EXPECTED_BASE_FEE) diff --git a/etc/system-contracts/bootloader/tests/README.md b/etc/system-contracts/bootloader/tests/README.md new file mode 100644 index 00000000..31acb0ec --- /dev/null +++ b/etc/system-contracts/bootloader/tests/README.md @@ -0,0 +1,23 @@ +# Testing + +## Full tests + +`dummy.yul` and `transfer_tests.yul` are full Yul files, which are replacing the bootloader, and are used in +`zksync-era` crate. + +## Unittests + +Please put bootloader unittests in `bootloader/bootloader_test.yul` file, and any testing utility functions in +`utils/test_utils.yul`. + +To execute tests, you should first run yarn to prepare the source code: + +```shell +yarn preprocess && yarn compile-yul +``` + +And then run the test framework: + +```shell +cd test_infa && cargo run +``` diff --git a/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul b/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul new file mode 100644 index 00000000..cd41c45d --- /dev/null +++ b/etc/system-contracts/bootloader/tests/bootloader/bootloader_test.yul @@ -0,0 +1,52 @@ +function TEST_safeSub() { + testing_assertEq(safeSub(10, 7, "err"), 3, "Failed to subtract 7") + testing_assertEq(safeSub(10, 8, "err"), 2, "Failed to subtract 8") +} + +function TEST_safeDiv() { + testing_assertEq(safeDiv(4, 2, "err"), 2, "Simple division") + testing_assertEq(safeDiv(5, 2, "err"), 2, "Rouding") + testing_assertEq(safeDiv(5, 3, "err"), 1, "Rouding down") + testing_assertEq(safeDiv(4, 3, "err"), 1, "Rouding down") + testing_assertEq(safeDiv(0, 3, "err"), 0, "Rouding down") +} +function TEST_safeDivAssert() { + testing_testWillFailWith("divByZero") + safeDiv(4, 0, "divByZero") +} + +function TEST_asserts() { + testing_testWillFailWith("willFail") + safeSub(10, 12, "willFail") +} + +function TEST_safeMul() { + testing_assertEq(safeMul(4, 2, "err"), 8, "Simple") + testing_assertEq(safeMul(0, 2, "err"), 0, "With zero") + testing_assertEq(safeMul(0, 0, "err"), 0, "With zero") + testing_assertEq(safeMul(2, 0, "err"), 0, "With zero") +} + +function TEST_safeMulAssert() { + testing_testWillFailWith("overflow") + let left := shl(129, 1) + testing_log("left", left) + safeMul(left, left, "overflow") +} + +// function TEST_should ignore + +function TEST_strLen() { + testing_assertEq(getStrLen("abcd"), 4, "short string") + testing_assertEq(getStrLen("00"), 2, "0 filled string") + testing_assertEq(getStrLen(""), 0, "empty string") + testing_assertEq(getStrLen("12345678901234567890123456789012"), 32, "max length") + testing_assertEq(getStrLen("1234567890123456789012345678901234"), 0, "over max length") +} + +function TEST_simple_transaction() { + // We'll test the transaction from 0.json + let txDataOffset := testing_txDataOffset(0) + let innerTxDataOffset := add(txDataOffset, 0x20) + testing_assertEq(getGasPerPubdataByteLimit(innerTxDataOffset), 0xc350, "Invalid pubdata limit") +} diff --git a/etc/system-contracts/bootloader/tests/utils/test_utils.yul b/etc/system-contracts/bootloader/tests/utils/test_utils.yul new file mode 100644 index 00000000..561a4679 --- /dev/null +++ b/etc/system-contracts/bootloader/tests/utils/test_utils.yul @@ -0,0 +1,55 @@ + + +// We're locating the test hooks 'before' the last free slot. +function TEST_HOOK_PTR() -> ret { + ret := LAST_FREE_SLOT() +} + +function TEST_HOOK_PARAMS_OFFSET() -> ret { + ret := sub(TEST_HOOK_PTR(), mul(5, 32)) +} + +function setTestHook(hook) { + mstore(TEST_HOOK_PTR(), unoptimized(hook)) +} + +function storeTestHookParam(paramId, value) { + let offset := add(TEST_HOOK_PARAMS_OFFSET(), mul(32, paramId)) + mstore(offset, unoptimized(value)) +} + + +function testing_log(msg, data) { + storeTestHookParam(0, nonOptimized(msg)) + storeTestHookParam(1, nonOptimized(data)) + setTestHook(nonOptimized(100)) +} + +function testing_start(test_name) { + storeTestHookParam(0, nonOptimized(test_name)) + setTestHook(nonOptimized(104)) +} + +function testing_assertEq(a, b, message) { + if iszero(eq(a, b)) { + storeTestHookParam(0, nonOptimized(a)) + storeTestHookParam(1, nonOptimized(b)) + storeTestHookParam(2, nonOptimized(message)) + setTestHook(nonOptimized(101)) + } +} + +function testing_testWillFailWith(message) { + storeTestHookParam(0, unoptimized(message)) + setTestHook(nonOptimized(102)) +} +function testing_totalTests(tests) { + storeTestHookParam(0, unoptimized(tests)) + setTestHook(nonOptimized(103)) +} + +// Returns txDataOffset for the index transaction. +function testing_txDataOffset(index) -> txDataOffset { + let txPtr := add(TX_DESCRIPTION_BEGIN_BYTE(), mul(index, TX_DESCRIPTION_SIZE())) + txDataOffset := mload(add(txPtr, 0x20)) +} diff --git a/etc/system-contracts/contracts/AccountCodeStorage.sol b/etc/system-contracts/contracts/AccountCodeStorage.sol index 21a2311b..d5027f2f 100644 --- a/etc/system-contracts/contracts/AccountCodeStorage.sol +++ b/etc/system-contracts/contracts/AccountCodeStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IAccountCodeStorage.sol"; import "./libraries/Utils.sol"; diff --git a/etc/system-contracts/contracts/BootloaderUtilities.sol b/etc/system-contracts/contracts/BootloaderUtilities.sol index 5a73eb2f..49467bdc 100644 --- a/etc/system-contracts/contracts/BootloaderUtilities.sol +++ b/etc/system-contracts/contracts/BootloaderUtilities.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IBootloaderUtilities.sol"; import "./libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/ComplexUpgrader.sol b/etc/system-contracts/contracts/ComplexUpgrader.sol index d45ecd57..2f4d886c 100644 --- a/etc/system-contracts/contracts/ComplexUpgrader.sol +++ b/etc/system-contracts/contracts/ComplexUpgrader.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IComplexUpgrader} from "./interfaces/IComplexUpgrader.sol"; import {FORCE_DEPLOYER} from "./Constants.sol"; diff --git a/etc/system-contracts/contracts/Compressor.sol b/etc/system-contracts/contracts/Compressor.sol index 4b11fd39..24aac725 100644 --- a/etc/system-contracts/contracts/Compressor.sol +++ b/etc/system-contracts/contracts/Compressor.sol @@ -1,25 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ICompressor, OPERATION_BITMASK, LENGTH_BITS_OFFSET, MAX_ENUMERATION_INDEX_SIZE} from "./interfaces/ICompressor.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; import {Utils} from "./libraries/Utils.sol"; import {UnsafeBytesCalldata} from "./libraries/UnsafeBytesCalldata.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; -import { - L1_MESSENGER_CONTRACT, - INITIAL_WRITE_STARTING_POSITION, - COMPRESSED_INITIAL_WRITE_SIZE, - STATE_DIFF_ENTRY_SIZE, - STATE_DIFF_ENUM_INDEX_OFFSET, - STATE_DIFF_FINAL_VALUE_OFFSET, - STATE_DIFF_DERIVED_KEY_OFFSET, - DERIVED_KEY_LENGTH, - VALUE_LENGTH, - ENUM_INDEX_LENGTH, - KNOWN_CODE_STORAGE_CONTRACT -} from "./Constants.sol"; +import {L1_MESSENGER_CONTRACT, INITIAL_WRITE_STARTING_POSITION, COMPRESSED_INITIAL_WRITE_SIZE, STATE_DIFF_ENTRY_SIZE, STATE_DIFF_ENUM_INDEX_OFFSET, STATE_DIFF_FINAL_VALUE_OFFSET, STATE_DIFF_DERIVED_KEY_OFFSET, DERIVED_KEY_LENGTH, VALUE_LENGTH, ENUM_INDEX_LENGTH, KNOWN_CODE_STORAGE_CONTRACT} from "./Constants.sol"; /** * @author Matter Labs @@ -96,7 +84,7 @@ contract Compressor is ICompressor, ISystemContract { /// - 2 bytes: number of initial writes /// - N bytes initial writes /// - 32 bytes derived key - /// - 1 byte metadata: + /// - 1 byte metadata: /// - first 5 bits: length in bytes of compressed value /// - last 3 bits: operation /// - 0 -> Nothing (32 bytes) @@ -106,7 +94,7 @@ contract Compressor is ICompressor, ISystemContract { /// - Len Bytes: Compressed Value /// - M bytes repeated writes /// - {_enumerationIndexSize} bytes for enumeration index - /// - 1 byte metadata: + /// - 1 byte metadata: /// - first 5 bits: length in bytes of compressed value /// - last 3 bits: operation /// - 0 -> Nothing (32 bytes) @@ -120,8 +108,8 @@ contract Compressor is ICompressor, ISystemContract { bytes calldata _stateDiffs, bytes calldata _compressedStateDiffs ) external payable onlyCallFrom(address(L1_MESSENGER_CONTRACT)) returns (bytes32 stateDiffHash) { - // We do not enforce the operator to use the optimal, i.e. the minimally possible _enumerationIndexSize. - // We do enforce however, that the _enumerationIndexSize is not larger than 8 bytes long, which is the + // We do not enforce the operator to use the optimal, i.e. the minimally possible _enumerationIndexSize. + // We do enforce however, that the _enumerationIndexSize is not larger than 8 bytes long, which is the // maximal ever possible size for enumeration index. require(_enumerationIndexSize <= MAX_ENUMERATION_INDEX_SIZE, "enumeration index size is too large"); @@ -144,7 +132,7 @@ contract Compressor is ICompressor, ISystemContract { bytes32 derivedKey = stateDiff.readBytes32(52); uint256 initValue = stateDiff.readUint256(92); uint256 finalValue = stateDiff.readUint256(124); - require(derivedKey == _compressedStateDiffs.readBytes32(stateDiffPtr), "iw: initial key mismatch"); + require(derivedKey == _compressedStateDiffs.readBytes32(stateDiffPtr), "iw: initial key mismatch"); stateDiffPtr += 32; uint8 metadata = uint8(bytes1(_compressedStateDiffs[stateDiffPtr])); @@ -172,7 +160,9 @@ contract Compressor is ICompressor, ISystemContract { uint256 initValue = stateDiff.readUint256(92); uint256 finalValue = stateDiff.readUint256(124); - uint256 compressedEnumIndex = _sliceToUint256(_compressedStateDiffs[stateDiffPtr:stateDiffPtr + _enumerationIndexSize]); + uint256 compressedEnumIndex = _sliceToUint256( + _compressedStateDiffs[stateDiffPtr:stateDiffPtr + _enumerationIndexSize] + ); require(enumIndex == compressedEnumIndex, "rw: enum key mismatch"); stateDiffPtr += _enumerationIndexSize; @@ -214,7 +204,7 @@ contract Compressor is ICompressor, ISystemContract { /// @param _initialValue Previous value of key/enumeration index. /// @param _finalValue Updated value of key/enumeration index. /// @param _operation The operation that was performed on value. - /// @param _compressedValue The slice of calldata with compressed value either representing the final + /// @param _compressedValue The slice of calldata with compressed value either representing the final /// value or difference between initial and final value. It should be of arbitrary length less than or equal to 32 bytes. /// @dev It is the responsibility of the caller of this function to ensure that the `_compressedValue` has length no longer than 32 bytes. /// @dev Operation id mapping: @@ -234,9 +224,15 @@ contract Compressor is ICompressor, ISystemContract { if (_operation == 0 || _operation == 3) { require(convertedValue == _finalValue, "transform or no compression: compressed and final mismatch"); } else if (_operation == 1) { - require(_initialValue + convertedValue == _finalValue, "add: initial plus converted not equal to final"); + require( + _initialValue + convertedValue == _finalValue, + "add: initial plus converted not equal to final" + ); } else if (_operation == 2) { - require(_initialValue - convertedValue == _finalValue, "sub: initial minus converted not equal to final"); + require( + _initialValue - convertedValue == _finalValue, + "sub: initial minus converted not equal to final" + ); } else { revert("unsupported operation"); } diff --git a/etc/system-contracts/contracts/Constants.sol b/etc/system-contracts/contracts/Constants.sol index 507d3437..f0896710 100644 --- a/etc/system-contracts/contracts/Constants.sol +++ b/etc/system-contracts/contracts/Constants.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; -import {IAccountCodeStorage} from "./interfaces/IAccountCodeStorage.sol"; +import {IAccountCodeStorage} from "./interfaces/IAccountCodeStorage.sol"; import {INonceHolder} from "./interfaces/INonceHolder.sol"; import {IContractDeployer} from "./interfaces/IContractDeployer.sol"; import {IKnownCodesStorage} from "./interfaces/IKnownCodesStorage.sol"; @@ -27,12 +27,10 @@ address constant SHA256_SYSTEM_CONTRACT = address(0x02); address constant ECADD_SYSTEM_CONTRACT = address(0x06); address constant ECMUL_SYSTEM_CONTRACT = address(0x07); -/// @dev The current maximum deployed precompile address. -/// Note: currently only two precompiles are deployed: -/// 0x01 - ecrecover -/// 0x02 - sha256 -/// Important! So the constant should be updated if more precompiles are deployed. -uint256 constant CURRENT_MAX_PRECOMPILE_ADDRESS = uint256(uint160(SHA256_SYSTEM_CONTRACT)); +/// @dev The maximal possible address of an L1-like precompie. These precompiles maintain the following properties: +/// - Their extcodehash is EMPTY_STRING_KECCAK +/// - Their extcodesize is 0 despite having a bytecode formally deployed there. +uint256 constant CURRENT_MAX_PRECOMPILE_ADDRESS = 0xff; address payable constant BOOTLOADER_FORMAL_ADDRESS = payable(address(SYSTEM_CONTRACTS_OFFSET + 0x01)); IAccountCodeStorage constant ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT = IAccountCodeStorage( @@ -97,7 +95,7 @@ enum SystemLogKey { EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY } -/// @dev The number of leaves in the L2->L1 log Merkle tree. +/// @dev The number of leaves in the L2->L1 log Merkle tree. /// While formally a tree of any length is acceptable, the node supports only a constant length of 2048 leaves. uint256 constant L2_TO_L1_LOGS_MERKLE_TREE_LEAVES = 2048; diff --git a/etc/system-contracts/contracts/ContractDeployer.sol b/etc/system-contracts/contracts/ContractDeployer.sol index ed6d3fc2..50af9742 100644 --- a/etc/system-contracts/contracts/ContractDeployer.sol +++ b/etc/system-contracts/contracts/ContractDeployer.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ImmutableData} from "./interfaces/IImmutableSimulator.sol"; import {IContractDeployer} from "./interfaces/IContractDeployer.sol"; -import {CREATE2_PREFIX, CREATE_PREFIX, NONCE_HOLDER_SYSTEM_CONTRACT, ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT, FORCE_DEPLOYER, MAX_SYSTEM_CONTRACT_ADDRESS, KNOWN_CODE_STORAGE_CONTRACT, ETH_TOKEN_SYSTEM_CONTRACT, IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT, COMPLEX_UPGRADER_CONTRACT} from "./Constants.sol"; +import {CREATE2_PREFIX, CREATE_PREFIX, NONCE_HOLDER_SYSTEM_CONTRACT, ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT, FORCE_DEPLOYER, MAX_SYSTEM_CONTRACT_ADDRESS, KNOWN_CODE_STORAGE_CONTRACT, ETH_TOKEN_SYSTEM_CONTRACT, IMMUTABLE_SIMULATOR_SYSTEM_CONTRACT, COMPLEX_UPGRADER_CONTRACT, KECCAK256_SYSTEM_CONTRACT} from "./Constants.sol"; import {Utils} from "./libraries/Utils.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; @@ -44,7 +44,10 @@ contract ContractDeployer is IContractDeployer, ISystemContract { } // It is an EOA, it is still an account. - if (ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.getRawCodeHash(_address) == 0) { + if ( + _address > address(MAX_SYSTEM_CONTRACT_ADDRESS) && + ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.getRawCodeHash(_address) == 0 + ) { return AccountAbstractionVersion.Version1; } @@ -214,6 +217,9 @@ contract ContractDeployer is IContractDeployer, ISystemContract { function forceDeployOnAddress(ForceDeployment calldata _deployment, address _sender) external payable onlySelf { _ensureBytecodeIsKnown(_deployment.bytecodeHash); + // Since the `forceDeployOnAddress` function is called only during upgrades, the Governance is trusted to correctly select + // the addresses to deploy the new bytecodes to and to assess whether overriding the AccountInfo for the "force-deployed" + // contract is acceptable. AccountInfo memory newAccountInfo; newAccountInfo.supportedAAVersion = AccountAbstractionVersion.None; // Accounts have sequential nonces by default. @@ -228,8 +234,23 @@ contract ContractDeployer is IContractDeployer, ISystemContract { false, _deployment.callConstructor ); + } - emit ContractDeployed(_sender, _deployment.bytecodeHash, _deployment.newAddress); + /// @notice The method that is temporarily needed to upgrade the Keccak256 precompile. It is to be removed in the + /// future. Unlike a normal forced deployment, it does not update account information as it requires updating a + /// mapping, and so requires Keccak256 precompile to work already. + /// @dev This method expects the sender (FORCE_DEPLOYER) to provide the correct bytecode hash for the Keccak256 + /// precompile. + function forceDeployKeccak256(bytes32 _keccak256BytecodeHash) external payable onlyCallFrom(FORCE_DEPLOYER) { + _ensureBytecodeIsKnown(_keccak256BytecodeHash); + _constructContract( + msg.sender, + address(KECCAK256_SYSTEM_CONTRACT), + _keccak256BytecodeHash, + msg.data[0:0], + false, + false + ); } /// @notice This method is to be used only during an upgrade to set bytecodes on specific addresses. @@ -295,7 +316,6 @@ contract ContractDeployer is IContractDeployer, ISystemContract { _storeAccountInfo(_newAddress, newAccountInfo); _constructContract(msg.sender, _newAddress, _bytecodeHash, _input, false, true); - emit ContractDeployed(msg.sender, _bytecodeHash, _newAddress); } /// @notice Check that bytecode hash is marked as known on the `KnownCodeStorage` system contracts @@ -352,5 +372,7 @@ contract ContractDeployer is IContractDeployer, ISystemContract { // If we do not call the constructor, we need to set the constructed code hash. ACCOUNT_CODE_STORAGE_SYSTEM_CONTRACT.storeAccountConstructedCodeHash(_newAddress, _bytecodeHash); } + + emit ContractDeployed(_sender, _bytecodeHash, _newAddress); } } diff --git a/etc/system-contracts/contracts/DefaultAccount.sol b/etc/system-contracts/contracts/DefaultAccount.sol index 0021839e..2257269d 100644 --- a/etc/system-contracts/contracts/DefaultAccount.sol +++ b/etc/system-contracts/contracts/DefaultAccount.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IAccount.sol"; import "./libraries/TransactionHelper.sol"; @@ -101,8 +101,6 @@ contract DefaultAccount is IAccount { if (_isValidSignature(txHash, _transaction.signature)) { magic = ACCOUNT_VALIDATION_SUCCESS_MAGIC; - } else { - magic = bytes4(0); } } @@ -219,7 +217,7 @@ contract DefaultAccount is IAccount { _transaction.processPaymasterInput(); } - fallback() external payable { + fallback() external payable ignoreInDelegateCall { // fallback of default account shouldn't be called by bootloader under no circumstances assert(msg.sender != BOOTLOADER_FORMAL_ADDRESS); diff --git a/etc/system-contracts/contracts/EmptyContract.sol b/etc/system-contracts/contracts/EmptyContract.sol index 711f8ba1..f0304beb 100644 --- a/etc/system-contracts/contracts/EmptyContract.sol +++ b/etc/system-contracts/contracts/EmptyContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/EventWriter.yul b/etc/system-contracts/contracts/EventWriter.yul index ea944457..4cd4a381 100644 --- a/etc/system-contracts/contracts/EventWriter.yul +++ b/etc/system-contracts/contracts/EventWriter.yul @@ -6,7 +6,9 @@ * The rest of the data is passed via calldata without copying. */ object "EventWriter" { - code { } + code { + return(0, 0) + } object "EventWriter_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/ImmutableSimulator.sol b/etc/system-contracts/contracts/ImmutableSimulator.sol index 54fb4c9d..a018c92a 100644 --- a/etc/system-contracts/contracts/ImmutableSimulator.sol +++ b/etc/system-contracts/contracts/ImmutableSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/IImmutableSimulator.sol"; import {DEPLOYER_SYSTEM_CONTRACT} from "./Constants.sol"; diff --git a/etc/system-contracts/contracts/KnownCodesStorage.sol b/etc/system-contracts/contracts/KnownCodesStorage.sol index 29006389..2dda7854 100644 --- a/etc/system-contracts/contracts/KnownCodesStorage.sol +++ b/etc/system-contracts/contracts/KnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IKnownCodesStorage} from "./interfaces/IKnownCodesStorage.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; diff --git a/etc/system-contracts/contracts/L1Messenger.sol b/etc/system-contracts/contracts/L1Messenger.sol index c5a03c8d..47ee3265 100644 --- a/etc/system-contracts/contracts/L1Messenger.sol +++ b/etc/system-contracts/contracts/L1Messenger.sol @@ -1,21 +1,13 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IL1Messenger, L2ToL1Log, L2_L1_LOGS_TREE_DEFAULT_LEAF_HASH, L2_TO_L1_LOG_SERIALIZE_SIZE, STATE_DIFF_COMPRESSION_VERSION_NUMBER} from "./interfaces/IL1Messenger.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; import {SystemContractHelper} from "./libraries/SystemContractHelper.sol"; import {EfficientCall} from "./libraries/EfficientCall.sol"; import {Utils} from "./libraries/Utils.sol"; -import { - SystemLogKey, - SYSTEM_CONTEXT_CONTRACT, - KNOWN_CODE_STORAGE_CONTRACT, - COMPRESSOR_CONTRACT, - STATE_DIFF_ENTRY_SIZE, - MAX_ALLOWED_PUBDATA_PER_BATCH, - L2_TO_L1_LOGS_MERKLE_TREE_LEAVES -} from "./Constants.sol"; +import {SystemLogKey, SYSTEM_CONTEXT_CONTRACT, KNOWN_CODE_STORAGE_CONTRACT, COMPRESSOR_CONTRACT, STATE_DIFF_ENTRY_SIZE, MAX_ALLOWED_PUBDATA_PER_BATCH, L2_TO_L1_LOGS_MERKLE_TREE_LEAVES} from "./Constants.sol"; /** * @author Matter Labs @@ -89,8 +81,9 @@ contract L1Messenger is IL1Messenger, ISystemContract { // We need to charge cost of hashing, as it will be used in `publishPubdataAndClearState`: // - keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) and keccakGasCost(64) when reconstructing L2ToL1Log - // - at most 2 times keccakGasCost(64) (as merkle tree can contain ~2*N leaves) - uint256 gasToPay = keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + 3 * keccakGasCost(64); + // - at most 1 time keccakGasCost(64) when building the Merkle tree (as merkle tree can contain + // ~2*N nodes, where the first N nodes are leaves the hash of which is calculated on the previous step). + uint256 gasToPay = keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + 2 * keccakGasCost(64); SystemContractHelper.burnGas(Utils.safeCastToU32(gasToPay)); } @@ -149,11 +142,12 @@ contract L1Messenger is IL1Messenger, ISystemContract { // We need to charge cost of hashing, as it will be used in `publishPubdataAndClearState`: // - keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) and keccakGasCost(64) when reconstructing L2ToL1Log // - keccakGasCost(64) and gasSpentOnMessageHashing when reconstructing Messages - // - at most 2 times keccakGasCost(64) (as merkle tree can contain ~2*N leaves) + // - at most 1 time keccakGasCost(64) when building the Merkle tree (as merkle tree can contain + // ~2*N nodes, where the first N nodes are leaves the hash of which is calculated on the previous step). uint256 gasToPay = pubdataLen * gasPerPubdataBytes + keccakGasCost(L2_TO_L1_LOG_SERIALIZE_SIZE) + - 4 * + 3 * keccakGasCost(64) + gasSpentOnMessageHashing; SystemContractHelper.burnGas(Utils.safeCastToU32(gasToPay)); @@ -203,7 +197,7 @@ contract L1Messenger is IL1Messenger, ISystemContract { /// Check logs uint32 numberOfL2ToL1Logs = uint32(bytes4(_totalL2ToL1PubdataAndStateDiffs[calldataPtr:calldataPtr + 4])); - require(numberOfL2ToL1Logs <= numberOfL2ToL1Logs, "Too many L2->L1 logs"); + require(numberOfL2ToL1Logs <= L2_TO_L1_LOGS_MERKLE_TREE_LEAVES, "Too many L2->L1 logs"); calldataPtr += 4; bytes32[] memory l2ToL1LogsTreeArray = new bytes32[](L2_TO_L1_LOGS_MERKLE_TREE_LEAVES); @@ -278,7 +272,7 @@ contract L1Messenger is IL1Messenger, ISystemContract { /// Check State Diffs /// encoding is as follows: - /// header (1 byte version, 2 bytes total len of compressed, 1 byte enumeration index size, 2 bytes number of initial writes) + /// header (1 byte version, 3 bytes total len of compressed, 1 byte enumeration index size, 2 bytes number of initial writes) /// body (N bytes of initial writes [32 byte derived key || compressed value], M bytes repeated writes [enumeration index || compressed value]) /// encoded state diffs: [20bytes address][32bytes key][32bytes derived key][8bytes enum index][32bytes initial value][32bytes final value] require( diff --git a/etc/system-contracts/contracts/L2EthToken.sol b/etc/system-contracts/contracts/L2EthToken.sol index 6a2ca48e..fbd63ae2 100644 --- a/etc/system-contracts/contracts/L2EthToken.sol +++ b/etc/system-contracts/contracts/L2EthToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {IEthToken} from "./interfaces/IEthToken.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; diff --git a/etc/system-contracts/contracts/MsgValueSimulator.sol b/etc/system-contracts/contracts/MsgValueSimulator.sol index 6a6a9d9f..07ed23d4 100644 --- a/etc/system-contracts/contracts/MsgValueSimulator.sol +++ b/etc/system-contracts/contracts/MsgValueSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./libraries/Utils.sol"; import "./libraries/EfficientCall.sol"; diff --git a/etc/system-contracts/contracts/NonceHolder.sol b/etc/system-contracts/contracts/NonceHolder.sol index f5a08a6b..b2775f1c 100644 --- a/etc/system-contracts/contracts/NonceHolder.sol +++ b/etc/system-contracts/contracts/NonceHolder.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./interfaces/INonceHolder.sol"; import "./interfaces/IContractDeployer.sol"; @@ -132,8 +132,11 @@ contract NonceHolder is INonceHolder, ISystemContract { /// @notice Increments the deployment nonce for the account and returns the previous one. /// @param _address The address of the account which to return the deploy nonce for. /// @return prevDeploymentNonce The deployment nonce at the time this function is called. - function incrementDeploymentNonce(address _address) external onlySystemCall returns (uint256 prevDeploymentNonce) { - require(msg.sender == address(DEPLOYER_SYSTEM_CONTRACT), ""); + function incrementDeploymentNonce(address _address) external returns (uint256 prevDeploymentNonce) { + require( + msg.sender == address(DEPLOYER_SYSTEM_CONTRACT), + "Only the contract deployer can increment the deployment nonce" + ); uint256 addressAsKey = uint256(uint160(_address)); uint256 oldRawNonce = rawNonces[addressAsKey]; diff --git a/etc/system-contracts/contracts/SystemContext.sol b/etc/system-contracts/contracts/SystemContext.sol index ad20d4bb..67f9248e 100644 --- a/etc/system-contracts/contracts/SystemContext.sol +++ b/etc/system-contracts/contracts/SystemContext.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {ISystemContext} from "./interfaces/ISystemContext.sol"; import {ISystemContract} from "./interfaces/ISystemContract.sol"; @@ -216,14 +216,14 @@ contract SystemContext is ISystemContext, ISystemContextDeprecated, ISystemContr require(_l2BlockNumber > 0, "L2 block number is never expected to be zero"); unchecked { - bytes32 correctPrevBlockHash = _calculateLegacyL2BlockHash(uint128(_l2BlockNumber - 1)); + bytes32 correctPrevBlockHash = _calculateLegacyL2BlockHash(_l2BlockNumber - 1); require(correctPrevBlockHash == _expectedPrevL2BlockHash, "The previous L2 block hash is incorrect"); // Whenever we'll be queried about the hashes of the blocks before the upgrade, // we'll use batches' hashes, so we don't need to store 256 previous hashes. // However, we do need to store the last previous hash in order to be able to correctly calculate the // hash of the new L2 block. - _setL2BlockHash(uint128(_l2BlockNumber - 1), correctPrevBlockHash); + _setL2BlockHash(_l2BlockNumber - 1, correctPrevBlockHash); } } @@ -382,7 +382,6 @@ contract SystemContext is ISystemContext, ISystemContextDeprecated, ISystemContr // The structure of the "setNewBatch" implies that currentBatchNumber > 0, but we still double check it require(currentBatchNumber > 0, "The current batch number must be greater than 0"); - bytes32 prevBatchHash = batchHash[currentBatchNumber - 1]; // In order to spend less pubdata, the packed version is published uint256 packedTimestamps = (uint256(currentBatchTimestamp) << 128) | currentL2BlockTimestamp; diff --git a/etc/system-contracts/contracts/interfaces/IAccount.sol b/etc/system-contracts/contracts/interfaces/IAccount.sol index cb54f313..3ee3f616 100644 --- a/etc/system-contracts/contracts/interfaces/IAccount.sol +++ b/etc/system-contracts/contracts/interfaces/IAccount.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol b/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol index 977e7e16..c266774e 100644 --- a/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol +++ b/etc/system-contracts/contracts/interfaces/IAccountCodeStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IAccountCodeStorage { function storeAccountConstructingCodeHash(address _address, bytes32 _hash) external; diff --git a/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol b/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol index 16cfc7cf..e995295e 100644 --- a/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol +++ b/etc/system-contracts/contracts/interfaces/IBootloaderUtilities.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol b/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol index 91095cfc..ebc26dd2 100644 --- a/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol +++ b/etc/system-contracts/contracts/interfaces/IComplexUpgrader.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IComplexUpgrader { function upgrade(address _delegateTo, bytes calldata _calldata) external payable; diff --git a/etc/system-contracts/contracts/interfaces/ICompressor.sol b/etc/system-contracts/contracts/interfaces/ICompressor.sol index 602cb70b..16e02d97 100644 --- a/etc/system-contracts/contracts/interfaces/ICompressor.sol +++ b/etc/system-contracts/contracts/interfaces/ICompressor.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; // The bitmask by applying which to the compressed state diff metadata we retrieve its operation. uint8 constant OPERATION_BITMASK = 7; diff --git a/etc/system-contracts/contracts/interfaces/IContractDeployer.sol b/etc/system-contracts/contracts/interfaces/IContractDeployer.sol index d21b917d..3f84672d 100644 --- a/etc/system-contracts/contracts/interfaces/IContractDeployer.sol +++ b/etc/system-contracts/contracts/interfaces/IContractDeployer.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IContractDeployer { /// @notice Defines the version of the account abstraction protocol diff --git a/etc/system-contracts/contracts/interfaces/IEthToken.sol b/etc/system-contracts/contracts/interfaces/IEthToken.sol index 5543d931..ec9b399f 100644 --- a/etc/system-contracts/contracts/interfaces/IEthToken.sol +++ b/etc/system-contracts/contracts/interfaces/IEthToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IEthToken { function balanceOf(uint256) external view returns (uint256); diff --git a/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol b/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol index 650f47d8..d30ac9b9 100644 --- a/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol +++ b/etc/system-contracts/contracts/interfaces/IImmutableSimulator.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; struct ImmutableData { uint256 index; diff --git a/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol b/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol index 075ad95f..b5a783ba 100644 --- a/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol +++ b/etc/system-contracts/contracts/interfaces/IKnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IKnownCodesStorage { event MarkedAsKnown(bytes32 indexed bytecodeHash, bool indexed sendBytecodeToL1); diff --git a/etc/system-contracts/contracts/interfaces/IL1Messenger.sol b/etc/system-contracts/contracts/interfaces/IL1Messenger.sol index 05919edb..ab6a670f 100644 --- a/etc/system-contracts/contracts/interfaces/IL1Messenger.sol +++ b/etc/system-contracts/contracts/interfaces/IL1Messenger.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /// @dev The log passed from L2 /// @param l2ShardId The shard identifier, 0 - rollup, 1 - porter. All other values are not used but are reserved for the future diff --git a/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol b/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol index 5edb43c2..3d75c8ed 100644 --- a/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol +++ b/etc/system-contracts/contracts/interfaces/IL2StandardToken.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IL2StandardToken { event BridgeMint(address indexed _account, uint256 _amount); diff --git a/etc/system-contracts/contracts/interfaces/IMailbox.sol b/etc/system-contracts/contracts/interfaces/IMailbox.sol index b82305fc..ba673058 100644 --- a/etc/system-contracts/contracts/interfaces/IMailbox.sol +++ b/etc/system-contracts/contracts/interfaces/IMailbox.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; interface IMailbox { function finalizeEthWithdrawal( diff --git a/etc/system-contracts/contracts/interfaces/INonceHolder.sol b/etc/system-contracts/contracts/interfaces/INonceHolder.sol index ebddfb04..1213fbea 100644 --- a/etc/system-contracts/contracts/interfaces/INonceHolder.sol +++ b/etc/system-contracts/contracts/interfaces/INonceHolder.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/IPaymaster.sol b/etc/system-contracts/contracts/interfaces/IPaymaster.sol index cc151935..928f19ed 100644 --- a/etc/system-contracts/contracts/interfaces/IPaymaster.sol +++ b/etc/system-contracts/contracts/interfaces/IPaymaster.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../libraries/TransactionHelper.sol"; diff --git a/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol b/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol index dc1b849f..59352f23 100644 --- a/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol +++ b/etc/system-contracts/contracts/interfaces/IPaymasterFlow.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContext.sol b/etc/system-contracts/contracts/interfaces/ISystemContext.sol index 096243f6..d8a98292 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContext.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContext.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol b/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol index 6a647c7e..b51faeed 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContextDeprecated.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/interfaces/ISystemContract.sol b/etc/system-contracts/contracts/interfaces/ISystemContract.sol index 7a66587a..c486abc9 100644 --- a/etc/system-contracts/contracts/interfaces/ISystemContract.sol +++ b/etc/system-contracts/contracts/interfaces/ISystemContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {SystemContractHelper} from "../libraries/SystemContractHelper.sol"; import {BOOTLOADER_FORMAL_ADDRESS} from "../Constants.sol"; diff --git a/etc/system-contracts/contracts/libraries/EfficientCall.sol b/etc/system-contracts/contracts/libraries/EfficientCall.sol index 16a6b535..22801d6f 100644 --- a/etc/system-contracts/contracts/libraries/EfficientCall.sol +++ b/etc/system-contracts/contracts/libraries/EfficientCall.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "./SystemContractHelper.sol"; import "./Utils.sol"; diff --git a/etc/system-contracts/contracts/libraries/RLPEncoder.sol b/etc/system-contracts/contracts/libraries/RLPEncoder.sol index 50da4624..8e32ea9b 100644 --- a/etc/system-contracts/contracts/libraries/RLPEncoder.sol +++ b/etc/system-contracts/contracts/libraries/RLPEncoder.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs * @custom:security-contact security@matterlabs.dev * @notice This library provides RLP encoding functionality. -*/ + */ library RLPEncoder { function encodeAddress(address _val) internal pure returns (bytes memory encoded) { // The size is equal to 20 bytes of the address itself + 1 for encoding bytes length in RLP. diff --git a/etc/system-contracts/contracts/libraries/SystemContractHelper.sol b/etc/system-contracts/contracts/libraries/SystemContractHelper.sol index 2878e423..a66b9670 100644 --- a/etc/system-contracts/contracts/libraries/SystemContractHelper.sol +++ b/etc/system-contracts/contracts/libraries/SystemContractHelper.sol @@ -1,37 +1,10 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import {MAX_SYSTEM_CONTRACT_ADDRESS} from "../Constants.sol"; -import { - SystemContractsCaller, - CalldataForwardingMode, - CALLFLAGS_CALL_ADDRESS, - CODE_ADDRESS_CALL_ADDRESS, - EVENT_WRITE_ADDRESS, - EVENT_INITIALIZE_ADDRESS, - GET_EXTRA_ABI_DATA_ADDRESS, - LOAD_CALLDATA_INTO_ACTIVE_PTR_CALL_ADDRESS, - META_CODE_SHARD_ID_OFFSET, - META_CALLER_SHARD_ID_OFFSET, - META_SHARD_ID_OFFSET, - META_AUX_HEAP_SIZE_OFFSET, - META_HEAP_SIZE_OFFSET, - META_GAS_PER_PUBDATA_BYTE_OFFSET, - MIMIC_CALL_BY_REF_CALL_ADDRESS, - META_CALL_ADDRESS, - MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT, - PTR_CALLDATA_CALL_ADDRESS, - PTR_ADD_INTO_ACTIVE_CALL_ADDRESS, - PTR_SHRINK_INTO_ACTIVE_CALL_ADDRESS, - PTR_PACK_INTO_ACTIVE_CALL_ADDRESS, - RAW_FAR_CALL_BY_REF_CALL_ADDRESS, - PRECOMPILE_CALL_ADDRESS, - SET_CONTEXT_VALUE_CALL_ADDRESS, - SYSTEM_CALL_BY_REF_CALL_ADDRESS, - TO_L1_CALL_ADDRESS -} from "./SystemContractsCaller.sol"; +import {SystemContractsCaller, CalldataForwardingMode, CALLFLAGS_CALL_ADDRESS, CODE_ADDRESS_CALL_ADDRESS, EVENT_WRITE_ADDRESS, EVENT_INITIALIZE_ADDRESS, GET_EXTRA_ABI_DATA_ADDRESS, LOAD_CALLDATA_INTO_ACTIVE_PTR_CALL_ADDRESS, META_CODE_SHARD_ID_OFFSET, META_CALLER_SHARD_ID_OFFSET, META_SHARD_ID_OFFSET, META_AUX_HEAP_SIZE_OFFSET, META_HEAP_SIZE_OFFSET, META_GAS_PER_PUBDATA_BYTE_OFFSET, MIMIC_CALL_BY_REF_CALL_ADDRESS, META_CALL_ADDRESS, MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT, PTR_CALLDATA_CALL_ADDRESS, PTR_ADD_INTO_ACTIVE_CALL_ADDRESS, PTR_SHRINK_INTO_ACTIVE_CALL_ADDRESS, PTR_PACK_INTO_ACTIVE_CALL_ADDRESS, RAW_FAR_CALL_BY_REF_CALL_ADDRESS, PRECOMPILE_CALL_ADDRESS, SET_CONTEXT_VALUE_CALL_ADDRESS, SYSTEM_CALL_BY_REF_CALL_ADDRESS, TO_L1_CALL_ADDRESS} from "./SystemContractsCaller.sol"; uint256 constant UINT32_MASK = 0xffffffff; uint256 constant UINT128_MASK = 0xffffffffffffffffffffffffffffffff; @@ -297,6 +270,8 @@ library SystemContractHelper { function getZkSyncMeta() internal view returns (ZkSyncMeta memory meta) { uint256 metaPacked = getZkSyncMetaBytes(); meta.gasPerPubdataByte = getGasPerPubdataByteFromMeta(metaPacked); + meta.heapSize = getHeapSizeFromMeta(metaPacked); + meta.auxHeapSize = getAuxHeapSizeFromMeta(metaPacked); meta.shardId = getShardIdFromMeta(metaPacked); meta.callerShardId = getCallerShardIdFromMeta(metaPacked); meta.codeShardId = getCodeShardIdFromMeta(metaPacked); diff --git a/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol b/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol index fe35341b..7be17992 100644 --- a/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol +++ b/etc/system-contracts/contracts/libraries/SystemContractsCaller.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8; +pragma solidity 0.8.20; import {MSG_VALUE_SYSTEM_CONTRACT, MSG_VALUE_SIMULATOR_IS_SYSTEM_BIT} from "../Constants.sol"; import "./Utils.sol"; diff --git a/etc/system-contracts/contracts/libraries/TransactionHelper.sol b/etc/system-contracts/contracts/libraries/TransactionHelper.sol index 10065f56..e0578197 100644 --- a/etc/system-contracts/contracts/libraries/TransactionHelper.sol +++ b/etc/system-contracts/contracts/libraries/TransactionHelper.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../openzeppelin/token/ERC20/IERC20.sol"; import "../openzeppelin/token/ERC20/utils/SafeERC20.sol"; diff --git a/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol b/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol index 7beca859..4ce65f5f 100644 --- a/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol +++ b/etc/system-contracts/contracts/libraries/UnsafeBytesCalldata.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; /** * @author Matter Labs diff --git a/etc/system-contracts/contracts/libraries/Utils.sol b/etc/system-contracts/contracts/libraries/Utils.sol index 8e66e35f..a2791520 100644 --- a/etc/system-contracts/contracts/libraries/Utils.sol +++ b/etc/system-contracts/contracts/libraries/Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.8.0; +pragma solidity 0.8.20; import "./EfficientCall.sol"; @@ -83,15 +83,15 @@ library Utils { // Note that the length of the bytecode must be provided in 32-byte words. require(_bytecode.length % 32 == 0, "po"); - uint256 bytecodeLenInWords = _bytecode.length / 32; - require(bytecodeLenInWords < 2 ** 16, "pp"); // bytecode length must be less than 2^16 words - require(bytecodeLenInWords % 2 == 1, "pr"); // bytecode length in words must be odd + uint256 lengthInWords = _bytecode.length / 32; + require(lengthInWords < 2 ** 16, "pp"); // bytecode length must be less than 2^16 words + require(lengthInWords % 2 == 1, "pr"); // bytecode length in words must be odd hashedBytecode = EfficientCall.sha(_bytecode) & 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // Setting the version of the hash hashedBytecode = (hashedBytecode | bytes32(uint256(1 << 248))); // Setting the length - hashedBytecode = hashedBytecode | bytes32(bytecodeLenInWords << 224); + hashedBytecode = hashedBytecode | bytes32(lengthInWords << 224); } } diff --git a/etc/system-contracts/contracts/precompiles/EcAdd.yul b/etc/system-contracts/contracts/precompiles/EcAdd.yul index 63bfb7ab..bfbac645 100644 --- a/etc/system-contracts/contracts/precompiles/EcAdd.yul +++ b/etc/system-contracts/contracts/precompiles/EcAdd.yul @@ -1,5 +1,7 @@ object "EcAdd" { - code { } + code { + return(0, 0) + } object "EcAdd_deployed" { code { //////////////////////////////////////////////////////////////// @@ -245,7 +247,7 @@ object "EcAdd" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery addition. + /// @return ret The result of the Montgomery subtraction. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } diff --git a/etc/system-contracts/contracts/precompiles/EcMul.yul b/etc/system-contracts/contracts/precompiles/EcMul.yul index efe7eec0..83c45ff0 100644 --- a/etc/system-contracts/contracts/precompiles/EcMul.yul +++ b/etc/system-contracts/contracts/precompiles/EcMul.yul @@ -1,5 +1,7 @@ object "EcMul" { - code { } + code { + return(0, 0) + } object "EcMul_deployed" { code { //////////////////////////////////////////////////////////////// @@ -223,7 +225,7 @@ object "EcMul" { /// @dev See https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_The_REDC_algorithm for further details on the Montgomery multiplication. /// @param minuend The minuend in Montgomery form. /// @param subtrahend The subtrahend in Montgomery form. - /// @return ret The result of the Montgomery addition. + /// @return ret The result of the Montgomery subtraction. function montgomerySub(minuend, subtrahend) -> ret { ret := montgomeryAdd(minuend, sub(P(), subtrahend)) } diff --git a/etc/system-contracts/contracts/precompiles/Ecrecover.yul b/etc/system-contracts/contracts/precompiles/Ecrecover.yul index f2965cbc..d0e5924b 100644 --- a/etc/system-contracts/contracts/precompiles/Ecrecover.yul +++ b/etc/system-contracts/contracts/precompiles/Ecrecover.yul @@ -5,7 +5,9 @@ * @dev It uses `precompileCall` to call the zkEVM built-in precompiles. */ object "Ecrecover" { - code { } + code { + return(0, 0) + } object "Ecrecover_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/precompiles/Keccak256.yul b/etc/system-contracts/contracts/precompiles/Keccak256.yul index 39f92ed3..b078d580 100644 --- a/etc/system-contracts/contracts/precompiles/Keccak256.yul +++ b/etc/system-contracts/contracts/precompiles/Keccak256.yul @@ -7,7 +7,9 @@ * @dev Thus keccak256 precompile circuit operates over padded data to perform efficient sponge round computation. */ object "Keccak256" { - code { } + code { + return(0, 0) + } object "Keccak256_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/precompiles/SHA256.yul b/etc/system-contracts/contracts/precompiles/SHA256.yul index ecb2d0df..fba02d5e 100644 --- a/etc/system-contracts/contracts/precompiles/SHA256.yul +++ b/etc/system-contracts/contracts/precompiles/SHA256.yul @@ -7,7 +7,9 @@ * @dev Thus sha256 precompile circuit operates over padded data to perform efficient sponge round computation. */ object "SHA256" { - code { } + code { + return(0, 0) + } object "SHA256_deployed" { code { //////////////////////////////////////////////////////////////// diff --git a/etc/system-contracts/contracts/test-contracts/Callable.sol b/etc/system-contracts/contracts/test-contracts/Callable.sol new file mode 100644 index 00000000..e7477e0c --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/Callable.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract Callable { + event Called(uint256 value, bytes data); + + fallback() external payable { + uint256 len; + assembly { + len := calldatasize() + } + bytes memory data = new bytes(len); + assembly { + calldatacopy(add(data, 0x20), 0, len) + } + emit Called(msg.value, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol b/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol new file mode 100644 index 00000000..caa5aae6 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/DelegateCaller.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +contract DelegateCaller { + function delegateCall(address _to) external payable { + assembly { + calldatacopy(0, 0, calldatasize()) + let result := delegatecall(gas(), _to, 0, calldatasize(), 0, 0) + returndatacopy(0, 0, returndatasize()) + switch result + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/Deployable.sol b/etc/system-contracts/contracts/test-contracts/Deployable.sol new file mode 100644 index 00000000..be35861a --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/Deployable.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract Deployable { + event Deployed(uint256 value, bytes data); + + constructor() payable { + uint256 len; + assembly { + len := codesize() + } + bytes memory data = new bytes(len); + assembly { + codecopy(add(data, 0x20), 0, len) + } + emit Deployed(msg.value, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol b/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol index 680df42a..b369f9a9 100644 --- a/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol +++ b/etc/system-contracts/contracts/test-contracts/DummyUpgrade.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; contract DummyUpgrade { event Upgraded(); diff --git a/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol b/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol new file mode 100644 index 00000000..faf09cd7 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/EventWriterTest.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract EventWriterTest { + event ZeroTopics(bytes data) anonymous; + event OneTopic(bytes data); + event TwoTopics(uint256 indexed topic1, bytes data); + event ThreeTopics(uint256 indexed topic1, uint256 indexed topic2, bytes data); + event FourTopics(uint256 indexed topic1, uint256 indexed topic2, uint256 indexed topic3, bytes data); + + function zeroTopics(bytes calldata data) external { + emit ZeroTopics(data); + } + + function oneTopic(bytes calldata data) external { + emit OneTopic(data); + } + + function twoTopics(uint256 topic1, bytes calldata data) external { + emit TwoTopics(topic1, data); + } + + function threeTopics(uint256 topic1, uint256 topic2, bytes calldata data) external { + emit ThreeTopics(topic1, topic2, data); + } + + function fourTopics(uint256 topic1, uint256 topic2, uint256 topic3, bytes calldata data) external { + emit FourTopics(topic1, topic2, topic3, data); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol b/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol new file mode 100644 index 00000000..c9931389 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/MockERC20Approve.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract MockERC20Approve { + event Approved(address to, uint256 value); + + function approve(address spender, uint256 value) external returns (bool) { + emit Approved(spender, value); + return true; + } + + function allowance(address owner, address spender) external view returns (uint256) { + return 0; + } +} diff --git a/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol b/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol index c8ae0b9d..7cec142e 100644 --- a/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol +++ b/etc/system-contracts/contracts/test-contracts/MockKnownCodesStorage.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; contract MockKnownCodesStorage { event MockBytecodePublished(bytes32 indexed bytecodeHash); diff --git a/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol b/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol new file mode 100644 index 00000000..b24da511 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/MockL1Messenger.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract MockL1Messenger { + event MockBytecodeL1Published(bytes32 indexed bytecodeHash); + + function requestBytecodeL1Publication(bytes32 _bytecodeHash) external { + emit MockBytecodeL1Published(_bytecodeHash); + } + + // To prevent failing during calls from the bootloader + function sendToL1(bytes calldata) external returns (bytes32) { + return bytes32(0); + } +} diff --git a/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol b/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol new file mode 100644 index 00000000..0c85deb6 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/NotSystemCaller.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +contract NotSystemCaller { + address immutable to; + + constructor(address _to) { + to = _to; + } + + fallback() external payable { + address _to = to; + assembly { + calldatacopy(0, 0, calldatasize()) + + let result := call(gas(), _to, callvalue(), 0, calldatasize(), 0, 0) + + returndatacopy(0, 0, returndatasize()) + + switch result + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/SystemCaller.sol b/etc/system-contracts/contracts/test-contracts/SystemCaller.sol new file mode 100644 index 00000000..58adfce2 --- /dev/null +++ b/etc/system-contracts/contracts/test-contracts/SystemCaller.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.8.20; + +import {SystemContractsCaller} from "../libraries/SystemContractsCaller.sol"; + +contract SystemCaller { + address immutable to; + + constructor(address _to) { + to = _to; + } + + fallback() external payable { + bytes memory result = SystemContractsCaller.systemCallWithPropagatedRevert( + uint32(gasleft()), + to, + uint128(msg.value), + msg.data + ); + assembly { + return(add(result, 0x20), mload(result)) + } + } +} diff --git a/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol b/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol index 135e2cd7..8eba841d 100644 --- a/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol +++ b/etc/system-contracts/contracts/test-contracts/TestSystemContract.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; +pragma solidity 0.8.20; import "../Constants.sol"; diff --git a/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol b/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol index 6a114e4b..2f9f7073 100644 --- a/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol +++ b/etc/system-contracts/contracts/test-contracts/TestSystemContractHelper.sol @@ -1,6 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8; +pragma solidity 0.8.20; import {MAX_SYSTEM_CONTRACT_ADDRESS, MSG_VALUE_SYSTEM_CONTRACT} from "../Constants.sol"; diff --git a/etc/system-contracts/hardhat.config.ts b/etc/system-contracts/hardhat.config.ts index 5877945a..0ae0329a 100644 --- a/etc/system-contracts/hardhat.config.ts +++ b/etc/system-contracts/hardhat.config.ts @@ -1,50 +1,55 @@ -import '@nomiclabs/hardhat-solpp'; -import '@typechain/hardhat'; -import '@nomiclabs/hardhat-ethers'; -import '@matterlabs/hardhat-zksync-solc'; -import '@matterlabs/hardhat-zksync-chai-matchers'; +import "@matterlabs/hardhat-zksync-chai-matchers"; +import "@matterlabs/hardhat-zksync-solc"; +import "@nomiclabs/hardhat-ethers"; +import "@nomiclabs/hardhat-solpp"; +import "@typechain/hardhat"; -const systemConfig = require('./SystemConfig.json'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const systemConfig = require("./SystemConfig.json"); export default { zksolc: { - version: '1.3.14', - compilerSource: 'binary', + version: "1.3.14", + compilerSource: "binary", settings: { - isSystem: true - } + isSystem: true, + }, }, zkSyncDeploy: { - zkSyncNetwork: 'http://localhost:3050', - ethNetwork: 'http://localhost:8545' + zkSyncNetwork: "http://localhost:3050", + ethNetwork: "http://localhost:8545", }, solidity: { - version: '0.8.17', + version: "0.8.20", settings: { optimizer: { - enabled: true, - runs: 200 + enabled: true, + runs: 9999999, + }, + outputSelection: { + "*": { + "*": ["storageLayout"], + }, }, - viaIR: true - } + }, }, solpp: { defs: (() => { return { ECRECOVER_COST_GAS: systemConfig.ECRECOVER_COST_GAS, KECCAK_ROUND_COST_GAS: systemConfig.KECCAK_ROUND_COST_GAS, - SHA256_ROUND_COST_GAS: systemConfig.SHA256_ROUND_COST_GAS - } - })() + SHA256_ROUND_COST_GAS: systemConfig.SHA256_ROUND_COST_GAS, + }; + })(), }, networks: { hardhat: { - zksync: true + zksync: true, }, zkSyncTestNode: { - url: 'http://127.0.0.1:8011', - ethNetwork: '', - zksync: true - } - } + url: "http://127.0.0.1:8011", + ethNetwork: "", + zksync: true, + }, + }, }; diff --git a/etc/system-contracts/package.json b/etc/system-contracts/package.json index 99bf3576..ad977d73 100644 --- a/etc/system-contracts/package.json +++ b/etc/system-contracts/package.json @@ -8,24 +8,36 @@ "@nomiclabs/hardhat-solpp": "^2.0.1", "commander": "^9.4.1", "ethers": "^5.7.0", - "hardhat": "^2.11.0", + "hardhat": "=2.16.0", "preprocess": "^3.2.0", "zksync-web3": "^0.14.3" }, "devDependencies": { + "@matterlabs/eslint-config-typescript": "^1.1.2", "@matterlabs/hardhat-zksync-chai-matchers": "^0.1.4", "@matterlabs/hardhat-zksync-solc": "^0.4.2", + "@matterlabs/prettier-config": "^1.0.3", "@nomicfoundation/hardhat-chai-matchers": "^1.0.3", "@nomiclabs/hardhat-ethers": "^2.0.6", "@typechain/ethers-v5": "^10.0.0", "@typechain/hardhat": "^7.0.0", "@types/chai": "^4.3.1", + "@types/lodash": "^4.14.199", "@types/mocha": "^9.1.1", "@types/node": "^17.0.34", + "@typescript-eslint/eslint-plugin": "^6.7.4", + "@typescript-eslint/parser": "^6.7.4", "chai": "^4.3.6", + "eslint": "^8.51.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-prettier": "^5.0.1", + "lodash": "^4.17.21", + "markdownlint-cli": "^0.33.0", "mocha": "^10.0.0", - "prettier": "^2.3.0", - "prettier-plugin-solidity": "^1.0.0-alpha.27", + "prettier": "^3.0.3", + "prettier-plugin-solidity": "^1.1.3", + "solhint": "^3.6.2", "template-file": "^6.0.1", "ts-generator": "^0.1.1", "ts-node": "^10.7.0", @@ -42,9 +54,25 @@ ] }, "scripts": { - "build": "hardhat compile", - "clean": "hardhat clean", - "preprocess": "rm -rf ./bootloader/build && yarn ts-node scripts/process.ts", - "compile-yul": "ts-node scripts/compile-yul.ts" + "build": "yarn build:sol && yarn build:yul", + "build:sol": "hardhat compile", + "build:yul": "yarn preprocess:yul && yarn compile-yul", + "calculate-hashes:check": "ts-node scripts/calculate-hashes.ts --check-only", + "calculate-hashes:fix": "ts-node scripts/calculate-hashes.ts", + "clean": "yarn clean:sol && yarn clean:yul", + "clean:sol": "hardhat clean", + "clean:yul": "rm -rf ./bootloader/build ./bootloader/tests/artifacts ./contracts/artifacts ./contracts/precompiles/artifacts", + "compile-yul": "ts-node scripts/compile-yul.ts", + "deploy-preimages": "ts-node scripts/deploy-preimages.ts", + "lint:check": "yarn lint:md && yarn lint:sol && yarn lint:ts && yarn prettier:check", + "lint:fix": "yarn lint:md --fix && yarn lint:sol --fix && yarn lint:ts --fix && yarn prettier:fix", + "lint:md": "markdownlint \"**/*.md\"", + "lint:sol": "solhint \"contracts/**/*.sol\"", + "lint:ts": "eslint .", + "preprocess:yul": "rm -rf ./bootloader/build && yarn ts-node scripts/process.ts", + "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yaml}\"", + "prettier:fix": "prettier --write \"**/*.{js,json,md,sol,ts,yaml}\"", + "test": "hardhat test --network zkSyncTestNode", + "test:bootloader": "cd bootloader/test_infra && cargo run" } } diff --git a/etc/system-contracts/scripts/calculate-hashes.ts b/etc/system-contracts/scripts/calculate-hashes.ts new file mode 100644 index 00000000..bc7fb007 --- /dev/null +++ b/etc/system-contracts/scripts/calculate-hashes.ts @@ -0,0 +1,230 @@ +import { ethers } from "ethers"; +import * as fs from "fs"; +import _ from "lodash"; +import os from "os"; +import { join } from "path"; +import { hashBytecode } from "zksync-web3/build/src/utils"; + +type ContractDetails = { + contractName: string; + bytecodePath: string; + sourceCodePath: string; +}; + +type Hashes = { + bytecodeHash: string; + sourceCodeHash: string; +}; + +type SystemContractHashes = ContractDetails & Hashes; + +const findDirsEndingWith = + (endingWith: string) => + (path: string): string[] => { + const absolutePath = makePathAbsolute(path); + try { + const dirs = fs.readdirSync(absolutePath, { withFileTypes: true }).filter((dirent) => dirent.isDirectory()); + const dirsEndingWithSol = dirs.filter((dirent) => dirent.name.endsWith(endingWith)); + return dirsEndingWithSol.map((dirent) => dirent.name); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read directory: ${absolutePath} Error: ${msg}`); + } + }; + +const SOLIDITY_ARTIFACTS_DIR = "artifacts-zk"; + +const getSolidityContractDetails = (dir: string, contractName: string): ContractDetails => { + const bytecodePath = join(SOLIDITY_ARTIFACTS_DIR, dir, contractName + ".sol", contractName + ".json"); + const sourceCodePath = join(dir, contractName + ".sol"); + return { + contractName, + bytecodePath, + sourceCodePath, + }; +}; + +const getSolidityContractsDetails = (dir: string): ContractDetails[] => { + const bytecodesDir = join(SOLIDITY_ARTIFACTS_DIR, dir); + const dirsEndingWithSol = findDirsEndingWith(".sol")(bytecodesDir); + const contractNames = dirsEndingWithSol.map((d) => d.replace(".sol", "")); + const solidityContractsDetails = contractNames.map((c) => getSolidityContractDetails(dir, c)); + return solidityContractsDetails; +}; + +const YUL_ARTIFACTS_DIR = "artifacts"; + +const getYulContractDetails = (dir: string, contractName: string): ContractDetails => { + const bytecodePath = join(dir, YUL_ARTIFACTS_DIR, contractName + ".yul", contractName + ".yul.zbin"); + const sourceCodePath = join(dir, contractName + ".yul"); + return { + contractName, + bytecodePath, + sourceCodePath, + }; +}; + +const getYulContractsDetails = (dir: string): ContractDetails[] => { + const bytecodesDir = join(dir, YUL_ARTIFACTS_DIR); + const dirsEndingWithYul = findDirsEndingWith(".yul")(bytecodesDir); + const contractNames = dirsEndingWithYul.map((d) => d.replace(".yul", "")); + const yulContractsDetails = contractNames.map((c) => getYulContractDetails(dir, c)); + return yulContractsDetails; +}; + +const makePathAbsolute = (path: string): string => { + return join(__dirname, "..", path); +}; + +const readSourceCode = (details: ContractDetails): string => { + const absolutePath = makePathAbsolute(details.sourceCodePath); + try { + return ethers.utils.hexlify(fs.readFileSync(absolutePath)); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read source code for ${details.contractName}: ${absolutePath} Error: ${msg}`); + } +}; + +const readBytecode = (details: ContractDetails): string => { + const absolutePath = makePathAbsolute(details.bytecodePath); + try { + if (details.bytecodePath.endsWith(".json")) { + const jsonFile = fs.readFileSync(absolutePath, "utf8"); + return ethers.utils.hexlify(JSON.parse(jsonFile).bytecode); + } else { + return ethers.utils.hexlify(fs.readFileSync(absolutePath)); + } + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read bytecode for ${details.contractName}: ${details.bytecodePath} Error: ${msg}`); + } +}; + +const getHashes = (contractName: string, sourceCode: string, bytecode: string): Hashes => { + try { + return { + bytecodeHash: ethers.utils.hexlify(hashBytecode(bytecode)), + // The extra checks performed by the hashBytecode function are not needed for the source code, therefore + // sha256 is used for simplicity + sourceCodeHash: ethers.utils.sha256(sourceCode), + }; + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to calculate hashes for ${contractName} Error: ${msg}`); + } +}; + +const getSystemContractsHashes = (systemContractsDetails: ContractDetails[]): SystemContractHashes[] => + systemContractsDetails.map((contractDetails) => { + const sourceCode = readSourceCode(contractDetails); + const bytecode = readBytecode(contractDetails); + const hashes = getHashes(contractDetails.contractName, sourceCode, bytecode); + + const systemContractHashes: SystemContractHashes = { + ...contractDetails, + ...hashes, + }; + + return systemContractHashes; + }); + +const readSystemContractsHashesFile = (path: string): SystemContractHashes[] => { + const absolutePath = makePathAbsolute(path); + try { + const file = fs.readFileSync(absolutePath, "utf8"); + const parsedFile = JSON.parse(file); + return parsedFile; + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to read file: ${absolutePath} Error: ${msg}`); + } +}; + +const saveSystemContractsHashesFile = (path: string, systemContractsHashes: SystemContractHashes[]) => { + const absolutePath = makePathAbsolute(path); + try { + fs.writeFileSync(absolutePath, JSON.stringify(systemContractsHashes, null, 2) + os.EOL); + } catch (err) { + const msg = err instanceof Error ? err.message : "Unknown error"; + throw new Error(`Failed to save file: ${absolutePath} Error: ${msg}`); + } +}; + +const findDifferences = (newHashes: SystemContractHashes[], oldHashes: SystemContractHashes[]) => { + const differentElements = _.xorWith(newHashes, oldHashes, _.isEqual); + + const differentUniqueElements = _.uniqWith(differentElements, (a, b) => a.contractName === b.contractName); + + const differencesList = differentUniqueElements.map((diffElem) => { + const newHashesElem = newHashes.find((elem) => elem.contractName === diffElem.contractName); + + const oldHashesElem = oldHashes.find((elem) => elem.contractName === diffElem.contractName); + + const differingFields = _.xorWith( + Object.entries(newHashesElem || {}), + Object.entries(oldHashesElem || {}), + _.isEqual + ); + + const differingFieldsUniqueKeys = _.uniq(differingFields.map(([key]) => key)); + + return { + contract: diffElem.contractName, + differingFields: differingFieldsUniqueKeys, + old: oldHashesElem || {}, + new: newHashesElem || {}, + }; + }); + + return differencesList; +}; + +const SOLIDITY_SOURCE_CODE_PATHS = ["cache-zk/solpp-generated-contracts"]; +const YUL_SOURCE_CODE_PATHS = ["contracts", "contracts/precompiles", "bootloader/build"]; +const OUTPUT_FILE_PATH = "SystemContractsHashes.json"; + +const main = async () => { + const args = process.argv; + if (args.length > 3 || (args.length == 3 && !args.includes("--check-only"))) { + console.log( + "This command can be used with no arguments or with the --check-only flag. Use the --check-only flag to check the hashes without updating the SystemContractsHashes.json file." + ); + process.exit(1); + } + const checkOnly = args.includes("--check-only"); + + const solidityContractsDetails = _.flatten(SOLIDITY_SOURCE_CODE_PATHS.map(getSolidityContractsDetails)); + const yulContractsDetails = _.flatten(YUL_SOURCE_CODE_PATHS.map(getYulContractsDetails)); + const systemContractsDetails = [...solidityContractsDetails, ...yulContractsDetails]; + + const newSystemContractsHashes = getSystemContractsHashes(systemContractsDetails); + const oldSystemContractsHashes = readSystemContractsHashesFile(OUTPUT_FILE_PATH); + if (_.isEqual(newSystemContractsHashes, oldSystemContractsHashes)) { + console.log("Calculated hashes match the hashes in the SystemContractsHashes.json file."); + console.log("Exiting..."); + return; + } + const differences = findDifferences(newSystemContractsHashes, oldSystemContractsHashes); + console.log("Calculated hashes differ from the hashes in the SystemContractsHashes.json file. Differences:"); + console.log(differences); + if (checkOnly) { + console.log("You can use the `yarn calculate-hashes:fix` command to update the SystemContractsHashes.json file."); + console.log("Exiting..."); + process.exit(1); + } else { + console.log("Updating..."); + saveSystemContractsHashesFile(OUTPUT_FILE_PATH, newSystemContractsHashes); + console.log("Update finished"); + console.log("Exiting..."); + return; + } +}; + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.error("Error:", err.message || err); + console.log("Please make sure to run `yarn build` before running this script."); + process.exit(1); + }); diff --git a/etc/system-contracts/scripts/compile-yul.ts b/etc/system-contracts/scripts/compile-yul.ts index e2402e27..15983fcf 100644 --- a/etc/system-contracts/scripts/compile-yul.ts +++ b/etc/system-contracts/scripts/compile-yul.ts @@ -1,35 +1,36 @@ -import * as hre from 'hardhat'; -import * as fs from 'fs'; -import { exec as _exec, spawn as _spawn } from 'child_process'; +import * as hre from "hardhat"; -import { getZksolcUrl, saltFromUrl } from '@matterlabs/hardhat-zksync-solc'; -import { getCompilersDir } from 'hardhat/internal/util/global-dir'; -import path from 'path'; +import { getZksolcUrl, saltFromUrl } from "@matterlabs/hardhat-zksync-solc"; +import { spawn as _spawn } from "child_process"; +import * as fs from "fs"; +import { getCompilersDir } from "hardhat/internal/util/global-dir"; +import path from "path"; -const COMPILER_VERSION = '1.3.14'; +const COMPILER_VERSION = "1.3.14"; const IS_COMPILER_PRE_RELEASE = false; async function compilerLocation(): Promise { const compilersCache = await getCompilersDir(); - let salt = ''; + let salt = ""; if (IS_COMPILER_PRE_RELEASE) { - const url = getZksolcUrl('https://github.com/matter-labs/zksolc-prerelease', hre.config.zksolc.version); + // @ts-ignore + const url = getZksolcUrl("https://github.com/matter-labs/zksolc-prerelease", hre.config.zksolc.version); salt = saltFromUrl(url); } - return path.join(compilersCache, 'zksolc', `zksolc-v${COMPILER_VERSION}${salt ? '-' : ''}${salt}`); + return path.join(compilersCache, "zksolc", `zksolc-v${COMPILER_VERSION}${salt ? "-" : ""}${salt}`); } // executes a command in a new shell // but pipes data to parent's stdout/stderr export function spawn(command: string) { - command = command.replace(/\n/g, ' '); - const child = _spawn(command, { stdio: 'inherit', shell: true }); + command = command.replace(/\n/g, " "); + const child = _spawn(command, { stdio: "inherit", shell: true }); return new Promise((resolve, reject) => { - child.on('error', reject); - child.on('close', (code) => { + child.on("error", reject); + child.on("close", (code) => { code == 0 ? resolve(code) : reject(`Child process exited with code ${code}`); }); }); @@ -40,7 +41,7 @@ export async function compileYul(path: string, files: string[], outputDirName: s console.log(`No test files provided in folder ${path}.`); return; } - let paths = preparePaths(path, files, outputDirName); + const paths = preparePaths(path, files, outputDirName); const zksolcLocation = await compilerLocation(); await spawn( @@ -49,19 +50,21 @@ export async function compileYul(path: string, files: string[], outputDirName: s } export async function compileYulFolder(path: string) { - let files: string[] = (await fs.promises.readdir(path)).filter((fn) => fn.endsWith('.yul')); + const files: string[] = (await fs.promises.readdir(path)).filter((fn) => fn.endsWith(".yul")); for (const file of files) { await compileYul(path, [file], `${file}`); } } - function preparePaths(path: string, files: string[], outputDirName: string | null): CompilerPaths { const filePaths = files - .map((val, _) => { + .map((val) => { return `sources/${val}`; }) - .join(' '); + .join(" "); + const currentWorkingDirectory = process.cwd(); + console.log(`Yarn project directory: ${currentWorkingDirectory}`); + const outputDir = outputDirName || files[0]; // This script is located in `system-contracts/scripts`, so we get one directory back. const absolutePathSources = `${__dirname}/../${path}`; @@ -83,17 +86,16 @@ class CompilerPaths { } } - async function main() { - await compileYulFolder('contracts'); - await compileYulFolder('contracts/precompiles'); - await compileYulFolder('bootloader/build'); - await compileYulFolder('bootloader/tests'); + await compileYulFolder("contracts"); + await compileYulFolder("contracts/precompiles"); + await compileYulFolder("bootloader/build"); + await compileYulFolder("bootloader/tests"); } main() .then(() => process.exit(0)) .catch((err) => { - console.error('Error:', err.message || err); + console.error("Error:", err.message || err); process.exit(1); }); diff --git a/etc/system-contracts/scripts/constants.ts b/etc/system-contracts/scripts/constants.ts index 6ad0ffaa..991f5ef9 100644 --- a/etc/system-contracts/scripts/constants.ts +++ b/etc/system-contracts/scripts/constants.ts @@ -1,11 +1,12 @@ -import { BigNumberish, BytesLike, constants, ethers } from 'ethers'; +import type { BigNumberish, BytesLike } from "ethers"; +import { constants, ethers } from "ethers"; -export const BOOTLOADER_FORMAL_ADDRESS = '0x0000000000000000000000000000000000008001'; +export const BOOTLOADER_FORMAL_ADDRESS = "0x0000000000000000000000000000000000008001"; export const ETH_ADDRESS = constants.AddressZero; export enum Language { - Solidity = 'solidity', - Yul = 'yul' + Solidity = "solidity", + Yul = "yul", } export interface SystemContractDescription { @@ -29,110 +30,122 @@ interface ISystemContracts { export const SYSTEM_CONTRACTS: ISystemContracts = { zeroAddress: { // zero address has EmptyContract code - address: '0x0000000000000000000000000000000000000000', - codeName: 'EmptyContract', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000000000", + codeName: "EmptyContract", + lang: Language.Solidity, }, ecrecover: { - address: '0x0000000000000000000000000000000000000001', - codeName: 'Ecrecover', + address: "0x0000000000000000000000000000000000000001", + codeName: "Ecrecover", lang: Language.Yul, - path: 'precompiles' + path: "precompiles", }, sha256: { - address: '0x0000000000000000000000000000000000000002', - codeName: 'SHA256', + address: "0x0000000000000000000000000000000000000002", + codeName: "SHA256", + lang: Language.Yul, + path: "precompiles", + }, + ecAdd: { + address: "0x0000000000000000000000000000000000000006", + codeName: "EcAdd", lang: Language.Yul, - path: 'precompiles' + path: "precompiles", + }, + ecMul: { + address: "0x0000000000000000000000000000000000000007", + codeName: "EcMul", + lang: Language.Yul, + path: "precompiles", }, bootloader: { // Bootloader has EmptyContract code - address: '0x0000000000000000000000000000000000008001', - codeName: 'EmptyContract', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008001", + codeName: "EmptyContract", + lang: Language.Solidity, }, accountCodeStorage: { - address: '0x0000000000000000000000000000000000008002', - codeName: 'AccountCodeStorage', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008002", + codeName: "AccountCodeStorage", + lang: Language.Solidity, }, nonceHolder: { - address: '0x0000000000000000000000000000000000008003', - codeName: 'NonceHolder', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008003", + codeName: "NonceHolder", + lang: Language.Solidity, }, knownCodesStorage: { - address: '0x0000000000000000000000000000000000008004', - codeName: 'KnownCodesStorage', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008004", + codeName: "KnownCodesStorage", + lang: Language.Solidity, }, immutableSimulator: { - address: '0x0000000000000000000000000000000000008005', - codeName: 'ImmutableSimulator', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008005", + codeName: "ImmutableSimulator", + lang: Language.Solidity, }, contractDeployer: { - address: '0x0000000000000000000000000000000000008006', - codeName: 'ContractDeployer', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008006", + codeName: "ContractDeployer", + lang: Language.Solidity, }, l1Messenger: { - address: '0x0000000000000000000000000000000000008008', - codeName: 'L1Messenger', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008008", + codeName: "L1Messenger", + lang: Language.Solidity, }, msgValueSimulator: { - address: '0x0000000000000000000000000000000000008009', - codeName: 'MsgValueSimulator', - lang: Language.Solidity + address: "0x0000000000000000000000000000000000008009", + codeName: "MsgValueSimulator", + lang: Language.Solidity, }, l2EthToken: { - address: '0x000000000000000000000000000000000000800a', - codeName: 'L2EthToken', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800a", + codeName: "L2EthToken", + lang: Language.Solidity, }, systemContext: { - address: '0x000000000000000000000000000000000000800b', - codeName: 'SystemContext', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800b", + codeName: "SystemContext", + lang: Language.Solidity, }, bootloaderUtilities: { - address: '0x000000000000000000000000000000000000800c', - codeName: 'BootloaderUtilities', - lang: Language.Solidity + address: "0x000000000000000000000000000000000000800c", + codeName: "BootloaderUtilities", + lang: Language.Solidity, }, eventWriter: { - address: '0x000000000000000000000000000000000000800d', - codeName: 'EventWriter', + address: "0x000000000000000000000000000000000000800d", + codeName: "EventWriter", lang: Language.Yul, - path: '' + path: "", }, compressor: { - address: '0x000000000000000000000000000000000000800e', - codeName: 'Compressor', + address: "0x000000000000000000000000000000000000800e", + codeName: "Compressor", lang: Language.Solidity, }, complexUpgrader: { - address: '0x000000000000000000000000000000000000800f', - codeName: 'ComplexUpgrader', + address: "0x000000000000000000000000000000000000800f", + codeName: "ComplexUpgrader", lang: Language.Solidity, }, keccak256: { - address: '0x0000000000000000000000000000000000008010', - codeName: 'Keccak256', + address: "0x0000000000000000000000000000000000008010", + codeName: "Keccak256", lang: Language.Yul, - path: 'precompiles' - } + path: "precompiles", + }, } as const; export const EIP712_TX_ID = 113; -export const CHAIN_ID = 260; +export const CHAIN_ID = 270; // For now, these types are hardcoded, but maybe it will make sense export const EIP712_DOMAIN = { - name: 'zkSync', - version: '2', - chainId: CHAIN_ID + name: "zkSync", + version: "2", + chainId: CHAIN_ID, // zkSync contract doesn't verify EIP712 signatures. }; @@ -176,38 +189,38 @@ export type Address = string; export const EIP712_TX_TYPE = { Transaction: [ - { name: 'txType', type: 'uint8' }, - { name: 'to', type: 'uint256' }, - { name: 'value', type: 'uint256' }, - { name: 'data', type: 'bytes' }, - { name: 'gasLimit', type: 'uint256' }, - { name: 'gasPerPubdataByteLimit', type: 'uint256' }, - { name: 'gasPrice', type: 'uint256' }, - { name: 'nonce', type: 'uint256' } - ] + { name: "txType", type: "uint8" }, + { name: "to", type: "uint256" }, + { name: "value", type: "uint256" }, + { name: "data", type: "bytes" }, + { name: "gasLimit", type: "uint256" }, + { name: "gasPerPubdataByteLimit", type: "uint256" }, + { name: "gasPrice", type: "uint256" }, + { name: "nonce", type: "uint256" }, + ], }; -export type DynamicType = 'bytes' | 'bytes32[]'; -export type FixedType = 'address' | 'uint256' | 'uint128' | 'uint32'; +export type DynamicType = "bytes" | "bytes32[]"; +export type FixedType = "address" | "uint256" | "uint128" | "uint32"; export type FieldType = FixedType | DynamicType; function isDynamicType(x: FieldType): x is DynamicType { - return x == 'bytes' || x == 'bytes32[]'; + return x == "bytes" || x == "bytes32[]"; } function isFixedType(x: FieldType): x is FixedType { return !isDynamicType(x); } -export const TransactionFields: Record = { - txType: 'uint256', - from: 'address', - to: 'address', - gasLimit: 'uint32', - gasPerPubdataByteLimit: 'uint32', - maxFeePerGas: 'uint256', - maxPriorityFeePerGas: 'uint256', - paymaster: 'address', +export const TransactionFields: Record = { + txType: "uint256", + from: "address", + to: "address", + gasLimit: "uint32", + gasPerPubdataByteLimit: "uint32", + maxFeePerGas: "uint256", + maxPriorityFeePerGas: "uint256", + paymaster: "address", // In the future, we might want to add some // new fields to the struct. The `txData` struct // is to be passed to account and any changes to its structure @@ -216,25 +229,25 @@ export const TransactionFields: Record = { // It is also recommended that their length is fixed, since // it would allow easier proof integration (in case we will need // some special circuit for preprocessing transactions). - reserved: Array(6).fill('uint256'), - data: 'bytes', - signature: 'bytes', - factoryDeps: 'bytes32[]', - paymasterInput: 'bytes', + reserved: Array(6).fill("uint256"), + data: "bytes", + signature: "bytes", + factoryDeps: "bytes32[]", + paymasterInput: "bytes", // Reserved dynamic type for the future use-case. Using it should be avoided, // But it is still here, just in case we want to enable some additional functionality. - reservedDynamic: 'bytes' -} + reservedDynamic: "bytes", +}; function capitalize(s: string) { - if(!s.length) { + if (!s.length) { return s; } return `${s[0].toUpperCase()}${s.substring(1)}`; } function memPosFromOffset(offset: number) { - return offset === 0 ? 'innerTxDataOffset' : `add(innerTxDataOffset, ${offset})`; + return offset === 0 ? "innerTxDataOffset" : `add(innerTxDataOffset, ${offset})`; } function getGetterName(fieldName: string) { @@ -242,7 +255,7 @@ function getGetterName(fieldName: string) { } function getPtrGetterName(fieldName: string) { - return `get${capitalize(fieldName)}Ptr`; + return `get${capitalize(fieldName)}Ptr`; } function getGetter(fieldName: string, offset: number) { @@ -252,7 +265,7 @@ function getGetter(fieldName: string, offset: number) { function ${getterName}(innerTxDataOffset) -> ret { ret := mload(${memPos}) } - ` + `; } function getPtrGetter(fieldName: string, offset: number) { @@ -263,12 +276,12 @@ function getPtrGetter(fieldName: string, offset: number) { ret := mload(${memPos}) ret := add(innerTxDataOffset, ret) } - ` + `; } function getTypeValidationMethodName(type: FieldType) { - if(type == 'bytes32[]'){ - return 'validateBytes32Array' + if (type == "bytes32[]") { + return "validateBytes32Array"; } else { return `validate${capitalize(type)}`; } @@ -280,12 +293,12 @@ function getBytesLengthGetterName(fieldName: string): string { function getBytesLengthGetter(fieldName: string, type: DynamicType) { let lengthToBytes: string; - if(type == 'bytes') { - lengthToBytes = `lengthToWords(mload(ptr))`; - } else if(type == 'bytes32[]') { - lengthToBytes = `mul(mload(ptr),32)`; + if (type == "bytes") { + lengthToBytes = "lengthToWords(mload(ptr))"; + } else if (type == "bytes32[]") { + lengthToBytes = "mul(mload(ptr),32)"; } else { - throw new Error(`Type ${type} is not supported`) + throw new Error(`Type ${type} is not supported`); } const getterName = getBytesLengthGetterName(fieldName); @@ -294,14 +307,16 @@ function getBytesLengthGetter(fieldName: string, type: DynamicType) { let ptr := ${getPtrGetterName(fieldName)}(innerTxDataOffset) ret := ${lengthToBytes} } - ` + `; } function getDataLength(baseLength: number, dynamicFields: [string, DynamicType][]) { - const ptrAdders = dynamicFields.map(([fieldName,]) => { - return ` - ret := add(ret, ${getBytesLengthGetterName(fieldName)}(innerTxDataOffset))` - }).join(''); + const ptrAdders = dynamicFields + .map(([fieldName]) => { + return ` + ret := add(ret, ${getBytesLengthGetterName(fieldName)}(innerTxDataOffset))`; + }) + .join(""); return ` function getDataLength(innerTxDataOffset) -> ret { @@ -312,16 +327,16 @@ function getDataLength(baseLength: number, dynamicFields: [string, DynamicType][ ${ptrAdders} } - ` + `; } function validateFixedSizeField(fieldName: string, type: FixedType): string { - if(type == 'uint256') { + if (type == "uint256") { // There is no validation for uint256 - return ``; + return ""; } const assertionErrorStr = getEncodingError(fieldName); - const fieldValue = `${fieldName}Value` + const fieldValue = `${fieldName}Value`; return ` let ${fieldValue} := ${getGetterName(fieldName)}(innerTxDataOffset) if iszero(${getTypeValidationMethodName(type)}(${fieldValue})) { @@ -335,31 +350,33 @@ function getEncodingError(fieldName: string) { // because the maximum length is 32. const assertionError = `Encoding ${fieldName}`; - if(assertionError.length > 32) { - throw new Error(`Assertion str too long: ${assertionError}`) + if (assertionError.length > 32) { + throw new Error(`Assertion str too long: ${assertionError}`); } return assertionError; } function getValidateTxStructure( - fixedFieldsChecks: string, + fixedFieldsChecks: string, fixedLenPart: number, dynamicFields: [string, DynamicType][] ): string { - const dynamicChecks = dynamicFields.map(([fieldName, type]) => { - const lengthPos = `${fieldName}LengthPos`; - const assertionError = getEncodingError(fieldName); - const validationMethod = getTypeValidationMethodName(type); + const dynamicChecks = dynamicFields + .map(([fieldName, type]) => { + const lengthPos = `${fieldName}LengthPos`; + const assertionError = getEncodingError(fieldName); + const validationMethod = getTypeValidationMethodName(type); - return ` + return ` let ${lengthPos} := ${getPtrGetterName(fieldName)}(innerTxDataOffset) if iszero(eq(${lengthPos}, expectedDynamicLenPtr)) { assertionError("${assertionError}") } expectedDynamicLenPtr := ${validationMethod}(${lengthPos}) - ` - }).join('\n'); + `; + }) + .join("\n"); return ` /// This method checks that the transaction's structure is correct @@ -378,13 +395,13 @@ export function getTransactionUtils(): string { ///\n`; let innerOffsetBytes = 0; - let checksStr = ``; + let checksStr = ""; const dynamicFields: [string, DynamicType][] = []; - for(const [key, value] of Object.entries(TransactionFields)) { + for (const [key, value] of Object.entries(TransactionFields)) { if (Array.isArray(value)) { - // We assume that the - for(let i = 0; i < value.length; i++) { + // We assume that the + for (let i = 0; i < value.length; i++) { const keyName = `${key}${i}`; result += getGetter(keyName, innerOffsetBytes); checksStr += validateFixedSizeField(keyName, value[i]); @@ -402,11 +419,7 @@ export function getTransactionUtils(): string { } } - result += getValidateTxStructure( - checksStr, - innerOffsetBytes, - dynamicFields - ); + result += getValidateTxStructure(checksStr, innerOffsetBytes, dynamicFields); result += getDataLength(innerOffsetBytes, dynamicFields); @@ -414,5 +427,5 @@ export function getTransactionUtils(): string { } export function getRevertSelector(): string { - return ethers.utils.keccak256(ethers.utils.toUtf8Bytes('Error(string)')).substring(0, 10); + return ethers.utils.keccak256(ethers.utils.toUtf8Bytes("Error(string)")).substring(0, 10); } diff --git a/etc/system-contracts/scripts/deploy-preimages.ts b/etc/system-contracts/scripts/deploy-preimages.ts new file mode 100644 index 00000000..20cc8611 --- /dev/null +++ b/etc/system-contracts/scripts/deploy-preimages.ts @@ -0,0 +1,305 @@ +import * as hre from "hardhat"; + +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import { Command } from "commander"; +import type { BigNumber } from "ethers"; +import { ethers } from "ethers"; +import { formatUnits, parseUnits } from "ethers/lib/utils"; +import * as fs from "fs"; +import * as path from "path"; +import { Provider, Wallet } from "zksync-web3"; +import { hashBytecode } from "zksync-web3/build/src/utils"; +import { Language, SYSTEM_CONTRACTS } from "./constants"; +import type { Dependency, DeployedDependency } from "./utils"; +import { filterPublishedFactoryDeps, publishFactoryDeps, readYulBytecode } from "./utils"; + +const testConfigPath = path.join(process.env.ZKSYNC_HOME as string, "etc/test_config/constant"); +const ethTestConfig = JSON.parse(fs.readFileSync(`${testConfigPath}/eth.json`, { encoding: "utf-8" })); + +// Maximum length of the combined length of dependencies +const MAX_COMBINED_LENGTH = 90000; + +const DEFAULT_ACCOUNT_CONTRACT_NAME = "DefaultAccount"; +const BOOTLOADER_CONTRACT_NAME = "Bootloader"; + +class ZkSyncDeployer { + deployer: Deployer; + gasPrice: BigNumber; + nonce: number; + dependenciesToUpgrade: DeployedDependency[]; + defaultAccountToUpgrade?: DeployedDependency; + bootloaderToUpgrade?: DeployedDependency; + constructor(deployer: Deployer, gasPrice: BigNumber, nonce: number) { + this.deployer = deployer; + this.gasPrice = gasPrice; + this.nonce = nonce; + this.dependenciesToUpgrade = []; + } + + async publishFactoryDeps(dependencies: Dependency[]) { + await publishFactoryDeps(dependencies, this.deployer, this.nonce, this.gasPrice); + this.nonce += 1; + } + + // Returns the current default account bytecode on zkSync + async currentDefaultAccountBytecode(): Promise { + const zkSync = await this.deployer.zkWallet.getMainContract(); + return await zkSync.getL2DefaultAccountBytecodeHash(); + } + + // If needed, appends the default account bytecode to the upgrade + async checkShouldUpgradeDefaultAA(defaultAccountBytecode: string) { + const bytecodeHash = ethers.utils.hexlify(hashBytecode(defaultAccountBytecode)); + const currentDefaultAccountBytecode = ethers.utils.hexlify(await this.currentDefaultAccountBytecode()); + + // If the bytecode is not the same as the one deployed on zkSync, we need to add it to the deployment + if (bytecodeHash.toLowerCase() !== currentDefaultAccountBytecode) { + this.defaultAccountToUpgrade = { + name: DEFAULT_ACCOUNT_CONTRACT_NAME, + bytecodeHashes: [bytecodeHash], + }; + } + } + + // Publish default account bytecode + async publishDefaultAA(defaultAccountBytecode: string) { + const [defaultAccountBytecodes] = await filterPublishedFactoryDeps( + DEFAULT_ACCOUNT_CONTRACT_NAME, + [defaultAccountBytecode], + this.deployer + ); + + if (defaultAccountBytecodes.length == 0) { + console.log("Default account bytecode is already published, skipping"); + return; + } + + await this.publishFactoryDeps([ + { + name: DEFAULT_ACCOUNT_CONTRACT_NAME, + bytecodes: defaultAccountBytecodes, + }, + ]); + this.nonce += 1; + } + + // Publishes the bytecode of default AA and appends it to the deployed bytecodes if needed. + async processDefaultAA() { + const defaultAccountBytecode = (await this.deployer.loadArtifact(DEFAULT_ACCOUNT_CONTRACT_NAME)).bytecode; + + await this.publishDefaultAA(defaultAccountBytecode); + await this.checkShouldUpgradeDefaultAA(defaultAccountBytecode); + } + + async currentBootloaderBytecode(): Promise { + const zkSync = await this.deployer.zkWallet.getMainContract(); + return await zkSync.getL2BootloaderBytecodeHash(); + } + + async checkShouldUpgradeBootloader(bootloaderCode: string) { + const bytecodeHash = ethers.utils.hexlify(hashBytecode(bootloaderCode)); + const currentBootloaderBytecode = ethers.utils.hexlify(await this.currentBootloaderBytecode()); + + // If the bytecode is not the same as the one deployed on zkSync, we need to add it to the deployment + if (bytecodeHash.toLowerCase() !== currentBootloaderBytecode) { + this.bootloaderToUpgrade = { + name: BOOTLOADER_CONTRACT_NAME, + bytecodeHashes: [bytecodeHash], + }; + } + } + + async publishBootloader(bootloaderCode: string) { + console.log("\nPublishing bootloader bytecode:"); + + const [deps] = await filterPublishedFactoryDeps(BOOTLOADER_CONTRACT_NAME, [bootloaderCode], this.deployer); + + if (deps.length == 0) { + console.log("Default bootloader bytecode is already published, skipping"); + return; + } + + await this.publishFactoryDeps([ + { + name: BOOTLOADER_CONTRACT_NAME, + bytecodes: deps, + }, + ]); + } + + async processBootloader() { + const bootloaderCode = ethers.utils.hexlify( + fs.readFileSync("./bootloader/build/artifacts/proved_batch.yul/proved_batch.yul.zbin") + ); + + await this.publishBootloader(bootloaderCode); + await this.checkShouldUpgradeBootloader(bootloaderCode); + } + + async shouldUpgradeSystemContract(contractAddress: string, expectedBytecodeHash: string): Promise { + // We could have also used the `getCode` method of the JSON-RPC, but in the context + // of system upgrades looking into account code storage is more robust + const currentBytecodeHash = await this.deployer.zkWallet.provider.getStorageAt( + SYSTEM_CONTRACTS.accountCodeStorage.address, + contractAddress + ); + + return expectedBytecodeHash.toLowerCase() !== currentBytecodeHash.toLowerCase(); + } + + // Returns the contracts to be published. + async prepareContractsForPublishing(): Promise { + const dependenciesToPublish: Dependency[] = []; + for (const contract of Object.values(SYSTEM_CONTRACTS)) { + const contractName = contract.codeName; + let factoryDeps: string[] = []; + if (contract.lang == Language.Solidity) { + const artifact = await this.deployer.loadArtifact(contractName); + factoryDeps = [...(await this.deployer.extractFactoryDeps(artifact)), artifact.bytecode]; + } else { + // Yul files have only one dependency + factoryDeps = [readYulBytecode(contract)]; + } + + const contractBytecodeHash = ethers.utils.hexlify(hashBytecode(factoryDeps[factoryDeps.length - 1])); + if (await this.shouldUpgradeSystemContract(contract.address, contractBytecodeHash)) { + this.dependenciesToUpgrade.push({ + name: contractName, + bytecodeHashes: [contractBytecodeHash], + address: contract.address, + }); + } + + const [bytecodesToPublish, currentLength] = await filterPublishedFactoryDeps( + contractName, + factoryDeps, + this.deployer + ); + if (bytecodesToPublish.length == 0) { + console.log(`All bytecodes for ${contractName} are already published, skipping`); + continue; + } + if (currentLength > MAX_COMBINED_LENGTH) { + throw new Error(`Can not publish dependencies of contract ${contractName}`); + } + + dependenciesToPublish.push({ + name: contractName, + bytecodes: bytecodesToPublish, + address: contract.address, + }); + } + + return dependenciesToPublish; + } + + async publishDependencies(dependenciesToPublish: Dependency[]) { + let currentLength = 0; + let currentDependencies: Dependency[] = []; + // We iterate over dependencies and try to batch the publishing of those in order to save up on gas as well as time. + for (const dependency of dependenciesToPublish) { + const dependencyLength = dependency.bytecodes.reduce((prev, dep) => prev + ethers.utils.arrayify(dep).length, 0); + if (currentLength + dependencyLength > MAX_COMBINED_LENGTH) { + await this.publishFactoryDeps(currentDependencies); + currentLength = dependencyLength; + currentDependencies = [dependency]; + } else { + currentLength += dependencyLength; + currentDependencies.push(dependency); + } + } + if (currentDependencies.length > 0) { + await this.publishFactoryDeps(currentDependencies); + } + } + + returnResult() { + return { + systemContracts: this.dependenciesToUpgrade, + defaultAA: this.defaultAccountToUpgrade, + bootloader: this.bootloaderToUpgrade, + }; + } +} + +export function l1RpcUrl() { + return process.env.ETH_CLIENT_WEB3_URL as string; +} + +export function l2RpcUrl() { + return process.env.API_WEB3_JSON_RPC_HTTP_URL as string; +} + +async function main() { + const program = new Command(); + + program.version("0.1.0").name("publish preimages").description("publish preimages for the L2 contracts"); + + program + .option("--private-key ") + .option("--gas-price ") + .option("--nonce ") + .option("--l1Rpc ") + .option("--l2Rpc ") + .option("--bootloader") + .option("--default-aa") + .option("--system-contracts") + .option("--file ") + .action(async (cmd) => { + const l1Rpc = cmd.l1Rpc ? cmd.l1Rpc : l1RpcUrl(); + const l2Rpc = cmd.l2Rpc ? cmd.l2Rpc : l2RpcUrl(); + const providerL1 = new ethers.providers.JsonRpcProvider(l1Rpc); + const providerL2 = new Provider(l2Rpc); + const wallet = cmd.privateKey + ? new Wallet(cmd.privateKey) + : Wallet.fromMnemonic(process.env.MNEMONIC ? process.env.MNEMONIC : ethTestConfig.mnemonic, "m/44'/60'/0'/0/1"); + wallet.connect(providerL2); + wallet.connectToL1(providerL1); + + // TODO(EVM-392): refactor to avoid `any` here. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const deployer = new Deployer(hre, wallet as any); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + deployer.zkWallet = deployer.zkWallet.connect(providerL2 as any).connectToL1(providerL1); + deployer.ethWallet = deployer.ethWallet.connect(providerL1); + const ethWallet = deployer.ethWallet; + + console.log(`Using deployer wallet: ${ethWallet.address}`); + + const gasPrice = cmd.gasPrice ? parseUnits(cmd.gasPrice, "gwei") : await providerL1.getGasPrice(); + console.log(`Using gas price: ${formatUnits(gasPrice, "gwei")} gwei`); + + const nonce = cmd.nonce ? parseInt(cmd.nonce) : await ethWallet.getTransactionCount(); + console.log(`Using nonce: ${nonce}`); + + const zkSyncDeployer = new ZkSyncDeployer(deployer, gasPrice, nonce); + if (cmd.bootloader) { + await zkSyncDeployer.processBootloader(); + } + + if (cmd.defaultAa) { + await zkSyncDeployer.processDefaultAA(); + } + + if (cmd.systemContracts) { + const dependenciesToPublish = await zkSyncDeployer.prepareContractsForPublishing(); + await zkSyncDeployer.publishDependencies(dependenciesToPublish); + } + + const result = zkSyncDeployer.returnResult(); + console.log(JSON.stringify(result, null, 2)); + if (cmd.file) { + fs.writeFileSync(cmd.file, JSON.stringify(result, null, 2)); + } + console.log("\nPublishing factory dependencies complete!"); + }); + + await program.parseAsync(process.argv); +} + +main() + .then(() => process.exit(0)) + .catch((err) => { + console.error("Error:", err); + process.exit(1); + }); diff --git a/etc/system-contracts/scripts/process.ts b/etc/system-contracts/scripts/process.ts index cccb72a6..3c230f61 100644 --- a/etc/system-contracts/scripts/process.ts +++ b/etc/system-contracts/scripts/process.ts @@ -1,14 +1,23 @@ -const preprocess = require('preprocess'); +import * as hre from "hardhat"; -import { existsSync, mkdirSync, write, writeFileSync } from 'fs'; -import { SYSTEM_CONTRACTS, getRevertSelector, getTransactionUtils } from './constants'; -import * as hre from 'hardhat'; -import { ethers } from 'ethers'; -import { renderFile } from 'template-file'; -import { utils } from 'zksync-web3'; -import { ForceDeployment } from './utils'; -const OUTPUT_DIR = 'bootloader/build'; +import { ethers } from "ethers"; +import { existsSync, mkdirSync, writeFileSync } from "fs"; +import { join } from "path"; +import { renderFile } from "template-file"; +import { utils } from "zksync-web3"; +import { SYSTEM_CONTRACTS, getRevertSelector, getTransactionUtils } from "./constants"; +import type { ForceDeployment } from "./utils"; +/* eslint-disable @typescript-eslint/no-var-requires */ +const preprocess = require("preprocess"); +const SYSTEM_PARAMS = require("../SystemConfig.json"); +/* eslint-enable@typescript-eslint/no-var-requires */ + +const OUTPUT_DIR = "bootloader/build"; + +function path(...args: string[]): string { + return join(__dirname, ...args); +} function getSelector(contractName: string, method: string): string { const artifact = hre.artifacts.readArtifactSync(contractName); @@ -20,7 +29,7 @@ function getSelector(contractName: string, method: string): string { // Methods from ethers do zero pad from left, but we need to pad from the right function padZeroRight(hexData: string, length: number): string { while (hexData.length < length) { - hexData += '0'; + hexData += "0"; } return hexData; @@ -28,15 +37,13 @@ function padZeroRight(hexData: string, length: number): string { const PADDED_SELECTOR_LENGTH = 32 * 2 + 2; function getPaddedSelector(contractName: string, method: string): string { - let result = getSelector(contractName, method); + const result = getSelector(contractName, method); - return padZeroRight(result, PADDED_SELECTOR_LENGTH) + return padZeroRight(result, PADDED_SELECTOR_LENGTH); } -const SYSTEM_PARAMS = require('../SystemConfig.json'); - function getSystemContextExpectedHash() { - const artifact = hre.artifacts.readArtifactSync('SystemContext'); + const artifact = hre.artifacts.readArtifactSync("SystemContext"); return ethers.utils.hexlify(utils.hashBytecode(artifact.bytecode)); } @@ -45,33 +52,33 @@ function upgradeSystemContextCalldata() { // it into writing of the calldata into the bootloader memory. const newHash = getSystemContextExpectedHash(); - const artifact = new ethers.utils.Interface(hre.artifacts.readArtifactSync('ContractDeployer').abi); + const artifact = new ethers.utils.Interface(hre.artifacts.readArtifactSync("ContractDeployer").abi); const forceDeplyment: ForceDeployment = { bytecodeHash: newHash, - newAddress: SYSTEM_CONTRACTS.systemContext.address, + newAddress: SYSTEM_CONTRACTS.systemContext.address, callConstructor: false, value: 0, - input: '0x' + input: "0x", }; - let calldata = artifact.encodeFunctionData('forceDeployOnAddresses', [[forceDeplyment]]); + let calldata = artifact.encodeFunctionData("forceDeployOnAddresses", [[forceDeplyment]]); const originalLength = (calldata.length - 2) / 2; // Padding calldata from the right. We really need to do it, since Yul would "implicitly" pad it from the left and it // it is not what we want. - while((calldata.length - 2) % 64 != 0) { - calldata += '0'; + while ((calldata.length - 2) % 64 != 0) { + calldata += "0"; } // We will apply tabulation to make the compiled bootloader code more readable - const TABULATION = '\t\t\t\t\t'; + const TABULATION = "\t\t\t\t\t"; // In the first slot we need to store the calldata's length let data = `mstore(0x00, ${originalLength})\n`; - + const slices = (calldata.length - 2) / 64; - for(let slice = 0; slice < slices; slice++) { + for (let slice = 0; slice < slices; slice++) { const offset = slice * 32; const sliceHex = calldata.slice(2 + offset * 2, 2 + offset * 2 + 64); @@ -83,97 +90,140 @@ function upgradeSystemContextCalldata() { // Maybe in the future some of these params will be passed // in a JSON file. For now, a simple object is ok here. -let params = { - MARK_BATCH_AS_REPUBLISHED_SELECTOR: getSelector('KnownCodesStorage', 'markFactoryDeps'), - VALIDATE_TX_SELECTOR: getSelector('IAccount', 'validateTransaction'), - EXECUTE_TX_SELECTOR: getSelector('DefaultAccount', 'executeTransaction'), - RIGHT_PADDED_GET_ACCOUNT_VERSION_SELECTOR: getPaddedSelector('ContractDeployer','extendedAccountVersion'), - RIGHT_PADDED_GET_RAW_CODE_HASH_SELECTOR: getPaddedSelector('AccountCodeStorage', 'getRawCodeHash'), - PAY_FOR_TX_SELECTOR: getSelector('DefaultAccount', 'payForTransaction'), - PRE_PAYMASTER_SELECTOR: getSelector('DefaultAccount', 'prepareForPaymaster'), - VALIDATE_AND_PAY_PAYMASTER: getSelector('IPaymaster', 'validateAndPayForPaymasterTransaction'), +const params = { + MARK_BATCH_AS_REPUBLISHED_SELECTOR: getSelector("KnownCodesStorage", "markFactoryDeps"), + VALIDATE_TX_SELECTOR: getSelector("IAccount", "validateTransaction"), + EXECUTE_TX_SELECTOR: getSelector("DefaultAccount", "executeTransaction"), + RIGHT_PADDED_GET_ACCOUNT_VERSION_SELECTOR: getPaddedSelector("ContractDeployer", "extendedAccountVersion"), + RIGHT_PADDED_GET_RAW_CODE_HASH_SELECTOR: getPaddedSelector("AccountCodeStorage", "getRawCodeHash"), + PAY_FOR_TX_SELECTOR: getSelector("DefaultAccount", "payForTransaction"), + PRE_PAYMASTER_SELECTOR: getSelector("DefaultAccount", "prepareForPaymaster"), + VALIDATE_AND_PAY_PAYMASTER: getSelector("IPaymaster", "validateAndPayForPaymasterTransaction"), // It doesn't used directly now but is important to keep the way to regenerate it when needed TX_UTILITIES: getTransactionUtils(), - RIGHT_PADDED_POST_TRANSACTION_SELECTOR: getPaddedSelector('IPaymaster', 'postTransaction'), - RIGHT_PADDED_SET_TX_ORIGIN: getPaddedSelector('SystemContext', 'setTxOrigin'), - RIGHT_PADDED_SET_GAS_PRICE: getPaddedSelector('SystemContext', 'setGasPrice'), - RIGHT_PADDED_INCREMENT_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'incrementTxNumberInBatch'), - RIGHT_PADDED_RESET_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'resetTxNumberInBatch'), - RIGHT_PADDED_SEND_L2_TO_L1_LOG_SELECTOR: getPaddedSelector('L1Messenger', 'sendL2ToL1Log'), - PUBLISH_PUBDATA_SELECTOR: getSelector('L1Messenger', 'publishPubdataAndClearState'), - RIGHT_PADDED_SET_NEW_BATCH_SELECTOR: getPaddedSelector('SystemContext', 'setNewBatch'), - RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR: getPaddedSelector('SystemContext', 'unsafeOverrideBatch'), + RIGHT_PADDED_POST_TRANSACTION_SELECTOR: getPaddedSelector("IPaymaster", "postTransaction"), + RIGHT_PADDED_SET_TX_ORIGIN: getPaddedSelector("SystemContext", "setTxOrigin"), + RIGHT_PADDED_SET_GAS_PRICE: getPaddedSelector("SystemContext", "setGasPrice"), + RIGHT_PADDED_INCREMENT_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "incrementTxNumberInBatch"), + RIGHT_PADDED_RESET_TX_NUMBER_IN_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "resetTxNumberInBatch"), + RIGHT_PADDED_SEND_L2_TO_L1_LOG_SELECTOR: getPaddedSelector("L1Messenger", "sendL2ToL1Log"), + PUBLISH_PUBDATA_SELECTOR: getSelector("L1Messenger", "publishPubdataAndClearState"), + RIGHT_PADDED_SET_NEW_BATCH_SELECTOR: getPaddedSelector("SystemContext", "setNewBatch"), + RIGHT_PADDED_OVERRIDE_BATCH_SELECTOR: getPaddedSelector("SystemContext", "unsafeOverrideBatch"), // Error REVERT_ERROR_SELECTOR: padZeroRight(getRevertSelector(), PADDED_SELECTOR_LENGTH), - RIGHT_PADDED_VALIDATE_NONCE_USAGE_SELECTOR: getPaddedSelector('INonceHolder', 'validateNonceUsage'), - RIGHT_PADDED_MINT_ETHER_SELECTOR: getPaddedSelector('L2EthToken', 'mint'), - GET_TX_HASHES_SELECTOR: getSelector('BootloaderUtilities', 'getTransactionHashes'), - CREATE_SELECTOR: getSelector('ContractDeployer','create'), - CREATE2_SELECTOR: getSelector('ContractDeployer','create2'), - CREATE_ACCOUNT_SELECTOR: getSelector('ContractDeployer','createAccount'), - CREATE2_ACCOUNT_SELECTOR: getSelector('ContractDeployer','create2Account'), - PADDED_TRANSFER_FROM_TO_SELECTOR: getPaddedSelector('L2EthToken', 'transferFromTo'), - SUCCESSFUL_ACCOUNT_VALIDATION_MAGIC_VALUE: getPaddedSelector('IAccount', 'validateTransaction'), - SUCCESSFUL_PAYMASTER_VALIDATION_MAGIC_VALUE: getPaddedSelector('IPaymaster', 'validateAndPayForPaymasterTransaction'), - PUBLISH_COMPRESSED_BYTECODE_SELECTOR: getSelector('Compressor', 'publishCompressedBytecode'), - GET_MARKER_PADDED_SELECTOR: getPaddedSelector('KnownCodesStorage', 'getMarker'), - RIGHT_PADDED_SET_L2_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'setL2Block'), - RIGHT_PADDED_APPEND_TRANSACTION_TO_L2_BLOCK_SELECTOR: getPaddedSelector('SystemContext', 'appendTransactionToCurrentL2Block'), - RIGHT_PADDED_PUBLISH_TIMESTAMP_DATA_TO_L1_SELECTOR: getPaddedSelector('SystemContext', 'publishTimestampDataToL1'), + RIGHT_PADDED_VALIDATE_NONCE_USAGE_SELECTOR: getPaddedSelector("INonceHolder", "validateNonceUsage"), + RIGHT_PADDED_MINT_ETHER_SELECTOR: getPaddedSelector("L2EthToken", "mint"), + GET_TX_HASHES_SELECTOR: getSelector("BootloaderUtilities", "getTransactionHashes"), + CREATE_SELECTOR: getSelector("ContractDeployer", "create"), + CREATE2_SELECTOR: getSelector("ContractDeployer", "create2"), + CREATE_ACCOUNT_SELECTOR: getSelector("ContractDeployer", "createAccount"), + CREATE2_ACCOUNT_SELECTOR: getSelector("ContractDeployer", "create2Account"), + PADDED_TRANSFER_FROM_TO_SELECTOR: getPaddedSelector("L2EthToken", "transferFromTo"), + SUCCESSFUL_ACCOUNT_VALIDATION_MAGIC_VALUE: getPaddedSelector("IAccount", "validateTransaction"), + SUCCESSFUL_PAYMASTER_VALIDATION_MAGIC_VALUE: getPaddedSelector("IPaymaster", "validateAndPayForPaymasterTransaction"), + PUBLISH_COMPRESSED_BYTECODE_SELECTOR: getSelector("Compressor", "publishCompressedBytecode"), + GET_MARKER_PADDED_SELECTOR: getPaddedSelector("KnownCodesStorage", "getMarker"), + RIGHT_PADDED_SET_L2_BLOCK_SELECTOR: getPaddedSelector("SystemContext", "setL2Block"), + RIGHT_PADDED_APPEND_TRANSACTION_TO_L2_BLOCK_SELECTOR: getPaddedSelector( + "SystemContext", + "appendTransactionToCurrentL2Block" + ), + RIGHT_PADDED_PUBLISH_TIMESTAMP_DATA_TO_L1_SELECTOR: getPaddedSelector("SystemContext", "publishTimestampDataToL1"), COMPRESSED_BYTECODES_SLOTS: 32768, ENSURE_RETURNED_MAGIC: 1, FORBID_ZERO_GAS_PER_PUBDATA: 1, SYSTEM_CONTEXT_EXPECTED_CODE_HASH: getSystemContextExpectedHash(), UPGRADE_SYSTEM_CONTEXT_CALLDATA: upgradeSystemContextCalldata(), - // One of "worst case" scenarios for the number of state diffs in a batch is when 120kb of pubdata is spent + // One of "worst case" scenarios for the number of state diffs in a batch is when 120kb of pubdata is spent // on repeated writes, that are all zeroed out. In this case, the number of diffs is 120k / 5 = 24k. This means that they will have - // accoomdate 6528000 bytes of calldata for the uncompressed state diffs. Adding 120k on top leaves us with + // accoomdate 6528000 bytes of calldata for the uncompressed state diffs. Adding 120k on top leaves us with // roughly 6650000 bytes needed for calldata. 207813 slots are needed to accomodate this amount of data. // We round up to 208000 slots just in case. // - // In theory though much more calldata could be used (if for instance 1 byte is used for enum index). It is the responsibility of the + // In theory though much more calldata could be used (if for instance 1 byte is used for enum index). It is the responsibility of the // operator to ensure that it can form the correct calldata for the L1Messenger. OPERATOR_PROVIDED_L1_MESSENGER_PUBDATA_SLOTS: 208000, - ...SYSTEM_PARAMS + ...SYSTEM_PARAMS, }; +function extractTestFunctionNames(sourceCode: string): string[] { + // Remove single-line comments + sourceCode = sourceCode.replace(/\/\/[^\n]*/g, ""); + + // Remove multi-line comments + sourceCode = sourceCode.replace(/\/\*[\s\S]*?\*\//g, ""); + + const regexPatterns = [/function\s+(TEST\w+)/g]; + + const results: string[] = []; + for (const pattern of regexPatterns) { + let match; + while ((match = pattern.exec(sourceCode)) !== null) { + results.push(match[1]); + } + } + + return [...new Set(results)]; // Remove duplicates +} + +function createTestFramework(tests: string[]): string { + let testFramework = ` + let test_id:= mload(0) + + switch test_id + case 0 { + testing_totalTests(${tests.length}) + } + `; + + tests.forEach((value, index) => { + testFramework += ` + case ${index + 1} { + testing_start("${value}") + ${value}() + } + `; + }); + + testFramework += ` + default { + } + return (0, 0) + `; + + return testFramework; +} + async function main() { - const bootloader = await renderFile('bootloader/bootloader.yul', params); - // The overhead is unknown for gas tests and so it should be zero to calculate it - const gasTestBootloaderTemplate = await renderFile('bootloader/bootloader.yul', { + const bootloader = await renderFile("bootloader/bootloader.yul", params); + // The overhead is unknown for gas tests and so it should be zero to calculate it + const gasTestBootloaderTemplate = await renderFile("bootloader/bootloader.yul", { ...params, L2_TX_INTRINSIC_GAS: 0, L2_TX_INTRINSIC_PUBDATA: 0, L1_TX_INTRINSIC_L2_GAS: 0, L1_TX_INTRINSIC_PUBDATA: 0, - FORBID_ZERO_GAS_PER_PUBDATA: 0 - }) + FORBID_ZERO_GAS_PER_PUBDATA: 0, + }); - const feeEstimationBootloaderTemplate = await renderFile('bootloader/bootloader.yul', { + const feeEstimationBootloaderTemplate = await renderFile("bootloader/bootloader.yul", { ...params, - ENSURE_RETURNED_MAGIC: 0 + ENSURE_RETURNED_MAGIC: 0, }); - console.log('Preprocessing production bootloader'); - const provedBatchBootloader = preprocess.preprocess( - bootloader, - { BOOTLOADER_TYPE: 'proved_batch' } - ); - console.log('Preprocessing playground block bootloader'); - const playgroundBatchBootloader = preprocess.preprocess( - bootloader, - { BOOTLOADER_TYPE: 'playground_batch' } - ); - console.log('Preprocessing gas test bootloader'); - const gasTestBootloader = preprocess.preprocess( - gasTestBootloaderTemplate, - { BOOTLOADER_TYPE: 'proved_batch' } - ); - console.log('Preprocessing fee estimation bootloader'); - const feeEstimationBootloader = preprocess.preprocess( - feeEstimationBootloaderTemplate, - { BOOTLOADER_TYPE: 'playground_batch' } - ); + console.log("Preprocessing production bootloader"); + const provedBatchBootloader = preprocess.preprocess(bootloader, { BOOTLOADER_TYPE: "proved_batch" }); + console.log("Preprocessing playground block bootloader"); + const playgroundBatchBootloader = preprocess.preprocess(bootloader, { BOOTLOADER_TYPE: "playground_batch" }); + console.log("Preprocessing gas test bootloader"); + const gasTestBootloader = preprocess.preprocess(gasTestBootloaderTemplate, { BOOTLOADER_TYPE: "proved_batch" }); + console.log("Preprocessing fee estimation bootloader"); + const feeEstimationBootloader = preprocess.preprocess(feeEstimationBootloaderTemplate, { + BOOTLOADER_TYPE: "playground_batch", + }); + + // For impersonating block start console.log('Preprocessing production impersonating bootloader'); const provedBatchImpersonatingBootloader = preprocess.preprocess( bootloader, @@ -184,19 +234,41 @@ async function main() { bootloader, { BOOTLOADER_TYPE: 'playground_batch', ACCOUNT_IMPERSONATING: true } ); + // For impersonating block end - if(!existsSync(OUTPUT_DIR)) { + console.log("Preprocessing bootloader tests"); + const bootloaderTests = await renderFile("bootloader/tests/bootloader/bootloader_test.yul", {}); + + const testMethods = extractTestFunctionNames(bootloaderTests); + + console.log("Found tests: " + testMethods); + + const testFramework = createTestFramework(testMethods); + + const bootloaderTestUtils = await renderFile("bootloader/tests/utils/test_utils.yul", {}); + + const bootloaderWithTests = await renderFile("bootloader/bootloader.yul", { + ...params, + CODE_START_PLACEHOLDER: "\n" + bootloaderTestUtils + "\n" + bootloaderTests + "\n" + testFramework, + }); + const provedBootloaderWithTests = preprocess.preprocess(bootloaderWithTests, { BOOTLOADER_TYPE: "proved_batch" }); + + if (!existsSync(OUTPUT_DIR)) { mkdirSync(OUTPUT_DIR); } - writeFileSync(`${OUTPUT_DIR}/proved_batch.yul`, provedBatchBootloader); - writeFileSync(`${OUTPUT_DIR}/playground_batch.yul`, playgroundBatchBootloader); - writeFileSync(`${OUTPUT_DIR}/gas_test.yul`, gasTestBootloader); - writeFileSync(`${OUTPUT_DIR}/fee_estimate.yul`, feeEstimationBootloader); - writeFileSync(`${OUTPUT_DIR}/proved_batch_impersonating.yul`, provedBatchImpersonatingBootloader); - writeFileSync(`${OUTPUT_DIR}/fee_estimate_impersonating.yul`, feeEstimationImpersonatingBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/bootloader_test.yul`), provedBootloaderWithTests); + writeFileSync(path(`../${OUTPUT_DIR}/proved_batch.yul`), provedBatchBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/playground_batch.yul`), playgroundBatchBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/gas_test.yul`), gasTestBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/fee_estimate.yul`), feeEstimationBootloader); + + // For impersonating block start + writeFileSync(path(`../${OUTPUT_DIR}/proved_batch_impersonating.yul`), provedBatchImpersonatingBootloader); + writeFileSync(path(`../${OUTPUT_DIR}/fee_estimate_impersonating.yul`), feeEstimationImpersonatingBootloader); + // For impersonating block end - console.log('Preprocessing done!'); + console.log("Preprocessing done!"); } main(); diff --git a/etc/system-contracts/scripts/quick-setup.sh b/etc/system-contracts/scripts/quick-setup.sh new file mode 100755 index 00000000..341d77d2 --- /dev/null +++ b/etc/system-contracts/scripts/quick-setup.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# install rust +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + +rustup toolchain install nightly + +# install era-test-node +cargo +nightly install --git https://github.com/matter-labs/era-test-node.git --locked --branch boojum-integration + +yarn +yarn build +era_test_node run > /dev/null 2>&1 & export TEST_NODE_PID=$! +yarn test +kill $TEST_NODE_PID diff --git a/etc/system-contracts/scripts/utils.ts b/etc/system-contracts/scripts/utils.ts index b48a3d01..8ef1dfff 100644 --- a/etc/system-contracts/scripts/utils.ts +++ b/etc/system-contracts/scripts/utils.ts @@ -1,9 +1,12 @@ -import {Language, SYSTEM_CONTRACTS, YulContractDescrption} from "./constants"; -import {BigNumber, BigNumberish, BytesLike, ethers} from "ethers"; +import * as hre from "hardhat"; + +import type { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import type { BigNumberish, BytesLike } from "ethers"; +import { BigNumber, ethers } from "ethers"; import * as fs from "fs"; -import {hashBytecode} from "zksync-web3/build/src/utils"; -import * as hre from 'hardhat'; -import {Deployer} from "@matterlabs/hardhat-zksync-deploy"; +import { hashBytecode } from "zksync-web3/build/src/utils"; +import type { YulContractDescrption } from "./constants"; +import { Language, SYSTEM_CONTRACTS } from "./constants"; export interface Dependency { name: string; @@ -39,24 +42,26 @@ export interface ForceDeployment { } export async function outputSystemContracts(): Promise { - const upgradeParamsPromises: Promise[] = Object.values(SYSTEM_CONTRACTS).map(async (systemContractInfo) => { - let bytecode: string; - - if (systemContractInfo.lang === Language.Yul) { - bytecode = readYulBytecode(systemContractInfo); - } else { - bytecode = (await hre.artifacts.readArtifact(systemContractInfo.codeName)).bytecode; - } - const bytecodeHash = hashBytecode(bytecode); - - return { - bytecodeHash: ethers.utils.hexlify(bytecodeHash), - newAddress: systemContractInfo.address, - value: "0", - input: '0x', - callConstructor: false + const upgradeParamsPromises: Promise[] = Object.values(SYSTEM_CONTRACTS).map( + async (systemContractInfo) => { + let bytecode: string; + + if (systemContractInfo.lang === Language.Yul) { + bytecode = readYulBytecode(systemContractInfo); + } else { + bytecode = (await hre.artifacts.readArtifact(systemContractInfo.codeName)).bytecode; + } + const bytecodeHash = hashBytecode(bytecode); + + return { + bytecodeHash: ethers.utils.hexlify(bytecodeHash), + newAddress: systemContractInfo.address, + value: "0", + input: "0x", + callConstructor: false, + }; } - }); + ); return await Promise.all(upgradeParamsPromises); } @@ -65,14 +70,13 @@ export async function outputSystemContracts(): Promise { // and outputs the JSON that can be used for performing the necessary upgrade const DEFAULT_L2_TX_GAS_LIMIT = 2097152; - -// For the given dependencies, returns an array of tuples (bytecodeHash, marker), where +// For the given dependencies, returns an array of tuples (bytecodeHash, marker), where // for each dependency the bytecodeHash is its versioned hash and marker is whether // the hash has been published before. export async function getMarkers(dependencies: BytesLike[], deployer: Deployer): Promise<[string, boolean][]> { const contract = new ethers.Contract( SYSTEM_CONTRACTS.knownCodesStorage.address, - (await hre.artifacts.readArtifact('KnownCodesStorage')).abi, + (await hre.artifacts.readArtifact("KnownCodesStorage")).abi, deployer.zkWallet ); @@ -91,8 +95,8 @@ export async function getMarkers(dependencies: BytesLike[], deployer: Deployer): export async function checkMarkers(dependencies: BytesLike[], deployer: Deployer) { const markers = await getMarkers(dependencies, deployer); - for(const [bytecodeHash, marker] of markers) { - if(!marker) { + for (const [bytecodeHash, marker] of markers) { + if (!marker) { throw new Error(`Failed to mark ${bytecodeHash}`); } } @@ -110,34 +114,40 @@ export async function publishFactoryDeps( dependencies: Dependency[], deployer: Deployer, nonce: number, - gasPrice: BigNumber, + gasPrice: BigNumber ) { - if(dependencies.length == 0) { + if (dependencies.length == 0) { return []; } const bytecodes = getBytecodes(dependencies); const combinedLength = totalBytesLength(bytecodes); - console.log(`\nPublishing dependencies for contracts ${dependencies.map((dep) => {return dep.name}).join(', ')}`); + console.log( + `\nPublishing dependencies for contracts ${dependencies + .map((dep) => { + return dep.name; + }) + .join(", ")}` + ); console.log(`Combined length ${combinedLength}`); const txHandle = await deployer.zkWallet.requestExecute({ contractAddress: ethers.constants.AddressZero, - calldata: '0x', + calldata: "0x", l2GasLimit: DEFAULT_L2_TX_GAS_LIMIT, factoryDeps: bytecodes, overrides: { nonce, gasPrice, - gasLimit: 3000000 - } - }) + gasLimit: 3000000, + }, + }); console.log(`Transaction hash: ${txHandle.hash}`); // Waiting for the transaction to be processed by the server await txHandle.wait(); - console.log('Transaction complete! Checking markers on L2...'); + console.log("Transaction complete! Checking markers on L2..."); // Double checking that indeed the dependencies have been marked as known await checkMarkers(bytecodes, deployer); @@ -147,21 +157,21 @@ export async function publishFactoryDeps( export async function filterPublishedFactoryDeps( contractName: string, factoryDeps: string[], - deployer: Deployer, + deployer: Deployer ): Promise<[string[], number]> { console.log(`\nFactory dependencies for contract ${contractName}:`); let currentLength = 0; - let bytecodesToDeploy: string[] = []; + const bytecodesToDeploy: string[] = []; const hashesAndMarkers = await getMarkers(factoryDeps, deployer); - for(let i = 0; i < factoryDeps.length; i++) { + for (let i = 0; i < factoryDeps.length; i++) { const depLength = ethers.utils.arrayify(factoryDeps[i]).length; const [hash, marker] = hashesAndMarkers[i]; console.log(`${hash} (length: ${depLength} bytes) (deployed: ${marker})`); - if(!marker) { + if (!marker) { currentLength += depLength; bytecodesToDeploy.push(factoryDeps[i]); } diff --git a/etc/system-contracts/yarn.lock b/etc/system-contracts/yarn.lock index 9adafa56..166747de 100644 --- a/etc/system-contracts/yarn.lock +++ b/etc/system-contracts/yarn.lock @@ -2,6 +2,33 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@babel/code-frame@^7.0.0": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" @@ -20,6 +47,42 @@ "@blakek/curry" "^2.0.2" pathington "^1.1.7" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -27,6 +90,38 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -218,10 +313,10 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.1": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c" - integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ== +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" "@ethersproject/abstract-signer" "^5.7.0" @@ -369,15 +464,39 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@fastify/busboy@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8" + integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + dependencies: + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== + "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -387,6 +506,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@matterlabs/eslint-config-typescript@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@matterlabs/eslint-config-typescript/-/eslint-config-typescript-1.1.2.tgz#a9be4e56aedf298800f247c5049fc412f8b301a7" + integrity sha512-AhiWJQr+MSE3RVfgp5XwGoMK7kNSKh6a18+T7hkNJtyycP0306I6IGmuFA5ZVbcakGb+K32fQWzepSkrNCTAGg== + "@matterlabs/hardhat-zksync-chai-matchers@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.4.tgz#105cb0ec1367c8fcd3ce7e3773f747c71fff675b" @@ -413,6 +537,11 @@ proper-lockfile "^4.1.2" semver "^7.5.1" +"@matterlabs/prettier-config@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@matterlabs/prettier-config/-/prettier-config-1.0.3.tgz#3e2eb559c0112bbe9671895f935700dad2a15d38" + integrity sha512-JW7nHREPqEtjBWz3EfxLarkmJBD8vi7Kx/1AQ6eBZnz12eHc1VkOyrc6mpR5ogTf0dOUNXFAfZut+cDe2dn4kQ== + "@metamask/eth-sig-util@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" @@ -424,20 +553,15 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@noble/hashes@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/hashes@~1.1.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== -"@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.6.3.tgz#7eed12d9f4404b416999d0c87686836c4c5c9b94" - integrity sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ== +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -452,7 +576,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -460,29 +584,31 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz#fdd5c045e7baa5169abeed0e1202bf94e4481c49" - integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-block@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" + integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" + ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" - integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-blockchain@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" + integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-ethash" "3.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" debug "^4.3.3" ethereum-cryptography "0.1.3" @@ -490,105 +616,105 @@ lru-cache "^5.1.1" memory-level "^1.0.0" -"@nomicfoundation/ethereumjs-common@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz#f6bcc7753994555e49ab3aa517fc8bcf89c280b9" - integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== +"@nomicfoundation/ethereumjs-common@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" + integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-util" "9.0.1" crc-32 "^1.2.0" -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" - integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== +"@nomicfoundation/ethereumjs-ethash@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" + integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" abstract-level "^1.0.3" bigint-crypto-utils "^3.0.23" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" - integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== +"@nomicfoundation/ethereumjs-evm@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" + integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" - integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== +"@nomicfoundation/ethereumjs-rlp@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" + integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" - integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== +"@nomicfoundation/ethereumjs-statemanager@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" + integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" + ethers "^5.7.1" + js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" - integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== +"@nomicfoundation/ethereumjs-trie@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" + integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz#59dc7452b0862b30342966f7052ab9a1f7802f52" - integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" +"@nomicfoundation/ethereumjs-tx@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" + integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz#deb2b15d2c308a731e82977aefc4e61ca0ece6c5" - integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== +"@nomicfoundation/ethereumjs-util@9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" + integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" - integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" +"@nomicfoundation/ethereumjs-vm@7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" + integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" debug "^4.3.3" ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" @@ -603,71 +729,71 @@ deep-eql "^4.0.1" ordinal "^1.0.3" -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.0.3.tgz#1d49e4ac028831a3011a9f3dca60bd1963185342" - integrity sha512-W+bIiNiZmiy+MTYFZn3nwjyPUO6wfWJ0lnXx2zZrM8xExKObMrhCh50yy8pQING24mHfpPFCn89wEB/iG7vZDw== +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== -"@nomicfoundation/solidity-analyzer-darwin-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.0.3.tgz#c0fccecc5506ff5466225e41e65691abafef3dbe" - integrity sha512-HuJd1K+2MgmFIYEpx46uzwEFjvzKAI765mmoMxy4K+Aqq1p+q7hHRlsFU2kx3NB8InwotkkIq3A5FLU1sI1WDw== +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.0.3.tgz#8261d033f7172b347490cd005931ef8168ab4d73" - integrity sha512-2cR8JNy23jZaO/vZrsAnWCsO73asU7ylrHIe0fEsXbZYqBP9sMr+/+xP3CELDHJxUbzBY8zqGvQt1ULpyrG+Kw== +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.0.3.tgz#1ba64b1d76425f8953dedc6367bd7dd46f31dfc5" - integrity sha512-Eyv50EfYbFthoOb0I1568p+eqHGLwEUhYGOxcRNywtlTE9nj+c+MT1LA53HnxD9GsboH4YtOOmJOulrjG7KtbA== +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.0.3.tgz#8d864c49b55e683f7e3b5cce9d10b628797280ac" - integrity sha512-V8grDqI+ivNrgwEt2HFdlwqV2/EQbYAdj3hbOvjrA8Qv+nq4h9jhQUxFpegYMDtpU8URJmNNlXgtfucSrAQwtQ== +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.0.3.tgz#16e769500cf1a8bb42ab9498cee3b93c30f78295" - integrity sha512-uRfVDlxtwT1vIy7MAExWAkRD4r9M79zMG7S09mCrWUn58DbLs7UFl+dZXBX0/8FTGYWHhOT/1Etw1ZpAf5DTrg== +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.0.3.tgz#75f4e1a25526d54c506e4eba63b3d698b6255b8f" - integrity sha512-8HPwYdLbhcPpSwsE0yiU/aZkXV43vlXT2ycH+XlOjWOnLfH8C41z0njK8DHRtEFnp4OVN6E7E5lHBBKDZXCliA== +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.0.3.tgz#ef6e20cfad5eedfdb145cc34a44501644cd7d015" - integrity sha512-5WWcT6ZNvfCuxjlpZOY7tdvOqT1kIQYlDF9Q42wMpZ5aTm4PvjdCmFDDmmTvyXEBJ4WTVmY5dWNWaxy8h/E28g== +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.0.3.tgz#98c4e3af9cee68896220fa7e270aefdf7fc89c7b" - integrity sha512-P/LWGZwWkyjSwkzq6skvS2wRc3gabzAbk6Akqs1/Iiuggql2CqdLBkcYWL5Xfv3haynhL+2jlNkak+v2BTZI4A== +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.0.3.tgz#12da288e7ef17ec14848f19c1e8561fed20d231d" - integrity sha512-4AcTtLZG1s/S5mYAIr/sdzywdNwJpOcdStGF3QMBzEt+cGn3MchMaS9b1gyhb2KKM2c39SmPF5fUuWq1oBSQZQ== +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== -"@nomicfoundation/solidity-analyzer@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.0.3.tgz#d1029f872e66cb1082503b02cc8b0be12f8dd95e" - integrity sha512-VFMiOQvsw7nx5bFmrmVp2Q9rhIjw2AFST4DYvWVVO9PMHPE23BY2+kyfrQ4J3xCMFC8fcBbGLt7l4q7m1SlTqg== +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.0.3" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.0.3" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.0.3" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.0.3" + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" "@nomiclabs/hardhat-docker@^2.0.0": version "2.0.2" @@ -679,9 +805,9 @@ node-fetch "^2.6.0" "@nomiclabs/hardhat-ethers@^2.0.6": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.1.tgz#3f1d1ab49813d1bae4c035cc1adec224711e528b" - integrity sha512-Gg0IFkT/DW3vOpih4/kMjeZCLYqtfgECLeLXTs7ZDPzcK0cfoc5wKk4nq5n/izCUzdhidO/Utd6ptF9JrWwWVA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== "@nomiclabs/hardhat-solpp@^2.0.1": version "2.0.1" @@ -691,26 +817,38 @@ fs-extra "^7.0.1" solpp "^0.11.5" +"@pkgr/utils@^2.3.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" + integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== + dependencies: + cross-spawn "^7.0.3" + fast-glob "^3.3.0" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.6.0" + "@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" + integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== -"@scure/bip32@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.0.tgz#dea45875e7fbc720c2b4560325f1cf5d2246d95b" - integrity sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: - "@noble/hashes" "~1.1.1" - "@noble/secp256k1" "~1.6.0" + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" -"@scure/bip39@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.0.tgz#92f11d095bae025f166bef3defcc5bf4945d419a" - integrity sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w== +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: - "@noble/hashes" "~1.1.1" + "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" "@sentry/core@5.30.0": @@ -781,10 +919,10 @@ "@sentry/types" "5.30.0" tslib "^1.9.3" -"@solidity-parser/parser@^0.14.5": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== +"@solidity-parser/parser@^0.16.0": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -814,9 +952,9 @@ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@typechain/ethers-v5@^10.0.0": version "10.2.1" @@ -833,11 +971,6 @@ dependencies: fs-extra "^9.1.0" -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - "@types/bn.js@^4.11.3": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" @@ -869,6 +1002,21 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== +"@types/json-schema@^7.0.12": + version "7.0.14" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" + integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash@^4.14.199": + version "4.14.199" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.199.tgz#c3edb5650149d847a277a8961a7ad360c474e9bf" + integrity sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg== + "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" @@ -887,9 +1035,9 @@ integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node@*": - version "18.8.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.2.tgz#17d42c6322d917764dd3d2d3a10d7884925de067" - integrity sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA== + version "20.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.0.tgz#9d7daa855d33d4efec8aea88cd66db1c2f0ebe16" + integrity sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg== "@types/node@^17.0.34": version "17.0.45" @@ -904,9 +1052,17 @@ "@types/node" "*" "@types/prettier@^2.1.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" - integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" "@types/resolve@^0.0.8": version "0.0.8" @@ -922,10 +1078,100 @@ dependencies: "@types/node" "*" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@types/semver@^7.5.0": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" + integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== + +"@typescript-eslint/eslint-plugin@^6.7.4": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz#fdb6f3821c0167e3356e9d89c80e8230b2e401f4" + integrity sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/type-utils" "6.9.0" + "@typescript-eslint/utils" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.7.4": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.0.tgz#2b402cadeadd3f211c25820e5433413347b27391" + integrity sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw== + dependencies: + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz#2626e9a7fe0e004c3e25f3b986c75f584431134e" + integrity sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw== + dependencies: + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + +"@typescript-eslint/type-utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz#23923c8c9677c2ad41457cf8e10a5f2946be1b04" + integrity sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ== + dependencies: + "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/utils" "6.9.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.0.tgz#86a0cbe7ac46c0761429f928467ff3d92f841098" + integrity sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw== + +"@typescript-eslint/typescript-estree@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz#d0601b245be873d8fe49f3737f93f8662c8693d4" + integrity sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ== + dependencies: + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/visitor-keys" "6.9.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.0.tgz#5bdac8604fca4823f090e4268e681c84d3597c9f" + integrity sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.9.0" + "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/typescript-estree" "6.9.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.9.0": + version "6.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz#cc69421c10c4ac997ed34f453027245988164e80" + integrity sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg== + dependencies: + "@typescript-eslint/types" "6.9.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== JSONStream@1.3.2: version "1.3.2" @@ -955,15 +1201,25 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== adm-zip@^0.4.16: version "0.4.16" @@ -990,6 +1246,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.12.4, ajv@^6.12.6: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1026,6 +1302,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +antlr4@^4.11.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" + integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== + antlr4@~4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.8.0.tgz#f938ec171be7fc2855cd3a533e87647185b32b6a" @@ -1042,9 +1323,9 @@ any-promise@^1.0.0: integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1069,7 +1350,75 @@ array-back@^4.0.1, array-back@^4.0.2: resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== -asn1@^0.2.4: +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asn1@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== @@ -1081,25 +1430,26 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" +ast-parents@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + axios@^0.21.1: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -1136,17 +1486,15 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bigint-crypto-utils@^3.0.23: - version "3.1.7" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz#c4c1b537c7c1ab7aadfaecf3edfd45416bf2c651" - integrity sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA== - dependencies: - bigint-mod-arith "^3.1.0" +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bigint-mod-arith@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" - integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== binary-extensions@^2.0.0: version "2.2.0" @@ -1193,6 +1541,13 @@ bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1307,36 +1662,47 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -buildcheck@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.3.tgz#70451897a95d80f7807e68fc412eb2e7e35ff4d5" - integrity sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA== +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== +bundle-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== dependencies: - streamsearch "^1.1.0" + run-applescript "^5.0.0" bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" @@ -1350,19 +1716,19 @@ chai-as-promised@^7.1.1: check-error "^1.0.2" chai@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + version "4.3.8" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" + integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" type-detect "^4.0.5" -chalk@4.1.2, chalk@^4.1.0: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -1418,14 +1784,14 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: safe-buffer "^5.0.1" classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== dependencies: abstract-level "^1.0.2" catering "^2.1.0" module-error "^1.0.1" - napi-macros "~2.0.0" + napi-macros "^2.2.2" node-gyp-build "^4.3.0" clean-stack@^2.0.0: @@ -1501,12 +1867,22 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^2.19.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== + +commander@~9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== @@ -1536,13 +1912,23 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cpu-features@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.4.tgz#0023475bb4f4c525869c162e4108099e35bf19d8" - integrity sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A== +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cpu-features@~0.0.8: + version "0.0.9" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" + integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ== dependencies: - buildcheck "0.0.3" - nan "^2.15.0" + buildcheck "~0.0.6" + nan "^2.17.0" crc-32@^1.2.0: version "1.2.2" @@ -1577,14 +1963,23 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.2.6: +debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -1601,25 +1996,64 @@ decimal.js-light@^2.5.0: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-eql@^4.0.1: +deep-eql@^4.0.1, deep-eql@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" -deep-extend@~0.6.0: +deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== + dependencies: + bplist-parser "^0.2.0" + untildify "^4.0.0" + +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== + dependencies: + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -1635,6 +2069,13 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + docker-modem@^1.0.8: version "1.0.9" resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" @@ -1646,9 +2087,9 @@ docker-modem@^1.0.8: split-ca "^1.0.0" docker-modem@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.6.tgz#8c76338641679e28ec2323abb65b3276fb1ce597" - integrity sha512-h0Ow21gclbYsZ3mkHDfsYNDqtRhXS8fXr51bU0qr1dxgTMJj0XufbzX+jhNOvA8KuEEzn6JbvLVhXyv+fny9Uw== + version "3.0.8" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.8.tgz#ef62c8bdff6e8a7d12f0160988c295ea8705e77a" + integrity sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ== dependencies: debug "^4.1.1" readable-stream "^3.5.0" @@ -1665,14 +2106,28 @@ dockerode@^2.5.8: tar-fs "~1.16.3" dockerode@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.4.tgz#875de614a1be797279caa9fe27e5637cf0e40548" - integrity sha512-3EUwuXnCU+RUlQEheDjmBE0B7q66PV9Rw5NiH1sXwINq0M9c5ERP9fxgkw36ZHOtzf4AGEEYySnkx/sACC9EgQ== + version "3.3.5" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.5.tgz#7ae3f40f2bec53ae5e9a741ce655fff459745629" + integrity sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA== dependencies: "@balena/dockerignore" "^1.0.2" docker-modem "^3.0.0" tar-fs "~2.0.1" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -1686,11 +2141,6 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^10.1.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" - integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1703,18 +2153,109 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +enhanced-resolve@^5.12.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -1730,6 +2271,156 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" + is-glob "^4.0.3" + +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-prettier@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" + integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== + dependencies: + prettier-linter-helpers "^1.0.0" + synckit "^0.8.5" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.51.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -1752,14 +2443,14 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz#74f2ac0f0f5fe79f012c889b3b8446a9a6264e6d" - integrity sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.6.3" - "@scure/bip32" "1.1.0" - "@scure/bip39" "1.1.0" + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" ethereumjs-abi@^0.6.8: version "0.6.8" @@ -1782,10 +2473,10 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33" - integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q== +ethers@^5.7.0, ethers@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== dependencies: "@ethersproject/abi" "5.7.0" "@ethersproject/abstract-provider" "5.7.0" @@ -1805,7 +2496,7 @@ ethers@^5.7.0: "@ethersproject/networks" "5.7.1" "@ethersproject/pbkdf2" "5.7.0" "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.1" + "@ethersproject/providers" "5.7.2" "@ethersproject/random" "5.7.0" "@ethersproject/rlp" "5.7.0" "@ethersproject/sha2" "5.7.0" @@ -1839,7 +2530,47 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -fast-glob@^3.2.12: +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== @@ -1850,6 +2581,16 @@ fast-glob@^3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -1857,6 +2598,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1871,7 +2619,7 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -1886,16 +2634,37 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -flat@^5.0.2: +flat-cache@^3.0.4: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" + integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + follow-redirects@^1.12.1, follow-redirects@^1.14.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + fp-ts@1.19.3: version "1.19.3" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" @@ -1956,20 +2725,40 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1980,14 +2769,40 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" + has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" + +get-stdin@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -1996,6 +2811,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" @@ -2032,6 +2854,61 @@ glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@~8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -2042,24 +2919,29 @@ graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -hardhat@^2.11.0: - version "2.11.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.11.2.tgz#c81388630255823bb1717ec07c4ee651b1fbe97f" - integrity sha512-BdsXC1CFJQDJKmAgCwpmGhFuVU6dcqlgMgT0Kg/xmFAFVugkpYu6NRmh4AaJ3Fah0/BR9DOR4XgQGIbg4eon/Q== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +hardhat@=2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.16.0.tgz#c5611d433416b31f6ce92f733b1f1b5236ad6230" + integrity sha512-7VQEJPQRAZdtrYUZaU9GgCpP3MBNy/pTdscARNJQMWKj5C+R7V32G5uIZKIqZ4QiqXa6CBfxxe+G+ahxUbHZHA== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.0.3" + "@nomicfoundation/ethereumjs-block" "5.0.1" + "@nomicfoundation/ethereumjs-blockchain" "7.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.1" + "@nomicfoundation/ethereumjs-evm" "2.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-statemanager" "2.0.1" + "@nomicfoundation/ethereumjs-trie" "6.0.1" + "@nomicfoundation/ethereumjs-tx" "5.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" @@ -2086,7 +2968,6 @@ hardhat@^2.11.0: mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" @@ -2094,10 +2975,15 @@ hardhat@^2.11.0: source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.4.0" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2108,11 +2994,30 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3: +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2137,6 +3042,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -2170,6 +3082,16 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2182,10 +3104,28 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.2.0, ignore@^5.2.4, ignore@~5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + immutable@^4.0.0-rc.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -2205,6 +3145,20 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -2212,6 +3166,27 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2219,18 +3194,55 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2241,7 +3253,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2253,43 +3265,184 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-yaml@4.1.0: +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonc-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -2319,14 +3472,21 @@ jsonparse@^1.2.0: integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== keccak@^3.0.0, keccak@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2355,6 +3515,26 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2375,7 +3555,17 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15: +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2389,9 +3579,9 @@ log-symbols@4.1.0: is-unicode-supported "^0.1.0" loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" @@ -2419,6 +3609,39 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +markdown-it@13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +markdownlint-cli@^0.33.0: + version "0.33.0" + resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.33.0.tgz#703af1234c32c309ab52fcd0e8bc797a34e2b096" + integrity sha512-zMK1oHpjYkhjO+94+ngARiBBrRDEUMzooDHBAHtmEIJ9oYddd9l3chCReY2mPlecwH7gflQp1ApilTo+o0zopQ== + dependencies: + commander "~9.4.1" + get-stdin "~9.0.0" + glob "~8.0.3" + ignore "~5.2.4" + js-yaml "^4.1.0" + jsonc-parser "~3.2.0" + markdownlint "~0.27.0" + minimatch "~5.1.2" + run-con "~1.2.11" + +markdownlint@~0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.27.0.tgz#9dabf7710a4999e2835e3c68317f1acd0bc89049" + integrity sha512-HtfVr/hzJJmE0C198F99JLaeada+646B5SaG2pVoEakLFI6iRGsvMqrnnrflq8hm1zQgwskEgqSnhDW11JBp0w== + dependencies: + markdown-it "13.0.1" + mcl-wasm@^0.7.1: version "0.7.9" resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" @@ -2433,6 +3656,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + memory-level@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" @@ -2447,7 +3675,12 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge2@^1.3.0: +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -2460,6 +3693,16 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2477,13 +3720,20 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1, minimatch@~5.1.2: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^7.4.3: version "7.4.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" @@ -2491,10 +3741,10 @@ minimatch@^7.4.3: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp-classic@^0.5.2: version "0.5.3" @@ -2526,11 +3776,10 @@ mnemonist@^0.38.0: obliterator "^2.0.0" mocha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" - integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" @@ -2577,7 +3826,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.15.0, nan@^2.16.0: +nan@^2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -2587,10 +3836,15 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== node-addon-api@^2.0.0: version "2.0.2" @@ -2598,31 +3852,88 @@ node-addon-api@^2.0.0: integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-fetch@^2.6.0: - version "2.6.8" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.8.tgz#a68d30b162bc1d8fd71a367e81b997e1f4d4937e" - integrity sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" obliterator@^2.0.0: version "2.0.4" @@ -2636,6 +3947,42 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== + dependencies: + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + ordinal@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" @@ -2693,6 +4040,23 @@ p-try@^1.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" @@ -2713,11 +4077,26 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathington@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/pathington/-/pathington-1.1.7.tgz#caf2d2db899a31fea4e81e3657af6acde5171903" @@ -2739,11 +4118,26 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + preprocess@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/preprocess/-/preprocess-3.2.0.tgz#36b3e2c52331fbc6fabb26d4fd5709304b7e3675" @@ -2751,28 +4145,37 @@ preprocess@^3.2.0: dependencies: xregexp "3.1.0" -prettier-plugin-solidity@^1.0.0-alpha.27: - version "1.0.0-rc.1" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-rc.1.tgz#97b6129430b262cb0b25cc4c865f9515be9c6ede" - integrity sha512-horUGyCBbfNHWvJ44UVEcsfVySEoG2gxGs7TcBfTZWNvD4VU6rjzwAkrUtKV6VvRZWn9dh01XZ2UhhB3eVnMXQ== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: - "@solidity-parser/parser" "^0.14.5" - emoji-regex "^10.1.0" - escape-string-regexp "^4.0.0" - semver "^7.3.7" + fast-diff "^1.1.2" + +prettier-plugin-solidity@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== + dependencies: + "@solidity-parser/parser" "^0.16.0" + semver "^7.3.8" solidity-comments-extractor "^0.0.7" - string-width "^4.2.3" -prettier@^2.1.2, prettier@^2.3.0: +prettier@^2.1.2: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -prettier@^2.3.1: +prettier@^2.3.1, prettier@^2.8.3: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -2803,12 +4206,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -qs@^6.7.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" @@ -2823,9 +4224,9 @@ randombytes@^2.1.0: safe-buffer "^5.1.0" raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -2833,9 +4234,9 @@ raw-body@^2.4.1: unpipe "1.0.0" readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -2846,9 +4247,9 @@ readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: util-deprecate "~1.0.1" readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -2876,16 +4277,35 @@ reduce-flatten@^2.0.0: resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-from-string@^2.0.0: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" @@ -2894,11 +4314,20 @@ resolve@1.17.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.8.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -2919,6 +4348,13 @@ rimraf@^2.2.8: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -2934,6 +4370,23 @@ rlp@^2.2.3: dependencies: bn.js "^5.2.0" +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + +run-con@~1.2.11: + version "1.2.12" + resolved "https://registry.yarnpkg.com/run-con/-/run-con-1.2.12.tgz#51c319910e45a3bd71ee773564a89d96635c8c64" + integrity sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg== + dependencies: + deep-extend "^0.6.0" + ini "~3.0.0" + minimist "^1.2.8" + strip-json-comments "~3.1.1" + run-parallel-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" @@ -2953,6 +4406,16 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2963,6 +4426,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -2983,23 +4455,16 @@ secp256k1@^4.0.1: node-gyp-build "^4.2.0" semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.1: +semver@^7.3.8, semver@^7.5.1, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -3013,6 +4478,25 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3031,6 +4515,18 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -3040,11 +4536,25 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -3060,6 +4570,31 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" +solhint@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.6.2.tgz#2b2acbec8fdc37b2c68206a71ba89c7f519943fe" + integrity sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ== + dependencies: + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" + optionalDependencies: + prettier "^2.8.3" + solidity-comments-extractor@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" @@ -3099,15 +4634,15 @@ split-ca@^1.0.0, split-ca@^1.0.1: integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== ssh2@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.11.0.tgz#ce60186216971e12f6deb553dcf82322498fe2e4" - integrity sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" + integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== dependencies: - asn1 "^0.2.4" + asn1 "^0.2.6" bcrypt-pbkdf "^1.0.2" optionalDependencies: - cpu-features "~0.0.4" - nan "^2.16.0" + cpu-features "~0.0.8" + nan "^2.17.0" stacktrace-parser@^0.1.10: version "0.1.10" @@ -3121,11 +4656,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-format@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" @@ -3140,6 +4670,33 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -3166,6 +4723,21 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -3173,7 +4745,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -3204,6 +4776,14 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== + dependencies: + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" + table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" @@ -3214,6 +4794,22 @@ table-layout@^1.0.2: typical "^5.2.0" wordwrapjs "^4.0.0" +table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + tar-fs@~1.16.3: version "1.16.3" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" @@ -3268,6 +4864,11 @@ template-file@^6.0.1: mkdirp "^1.0.4" p-limit "^4.0.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -3287,6 +4888,11 @@ thenify-all@^1.0.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== + tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -3316,6 +4922,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-command-line-args@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" @@ -3378,11 +4989,26 @@ ts-node@^10.7.0: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.5.0, tslib@^2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -3403,11 +5029,23 @@ tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -3434,15 +5072,54 @@ typechain@^8.1.1: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.6.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typical@^4.0.0: version "4.0.0" @@ -3454,12 +5131,27 @@ typical@^5.2.0: resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -undici@^5.4.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.11.0.tgz#1db25f285821828fc09d3804b9e2e934ae86fc13" - integrity sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici@^5.14.0: + version "5.26.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.4.tgz#dc861c35fb53ae025a173a790d984aa9b2e279a1" + integrity sha512-OG+QOf0fTLtazL9P9X7yqWxQ+Z0395Wk6DSkyTxtaq3wQEjIroVe7Y4asCX/vcCxYpNGMnwz8F0qbRYUoaQVMw== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -3476,6 +5168,18 @@ unpipe@1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3504,6 +5208,35 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wordwrapjs@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..bc962f33 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2023-07-23" +components = ["rustfmt", "clippy"] \ No newline at end of file diff --git a/scripts/refresh_contracts.sh b/scripts/refresh_contracts.sh index 2b6b49ba..fb9e3312 100755 --- a/scripts/refresh_contracts.sh +++ b/scripts/refresh_contracts.sh @@ -12,7 +12,7 @@ for contract in "${contracts[@]}"; do cp $SRC_DIR/$contract.sol/$contract.json $DST_DIR done -precompiles=("Ecrecover" "Keccak256" "SHA256") +precompiles=("EcAdd" "EcMul" "Ecrecover" "Keccak256" "SHA256") for precompile in "${precompiles[@]}"; do cp etc/system-contracts/contracts/precompiles/artifacts/$precompile.yul/$precompile.yul.zbin $DST_DIR diff --git a/src/bootloader_debug.rs b/src/bootloader_debug.rs index d093c593..c83b9a80 100644 --- a/src/bootloader_debug.rs +++ b/src/bootloader_debug.rs @@ -1,11 +1,11 @@ +use multivm::interface::{dyn_tracers::vm_1_4_0::DynTracer, tracer::VmExecutionStopReason}; use std::sync::Arc; -use once_cell::sync::OnceCell; -use vm::{ - constants::BOOTLOADER_HEAP_PAGE, BootloaderState, DynTracer, ExecutionEndTracer, - ExecutionProcessing, HistoryMode, SimpleMemory, VmExecutionResultAndLogs, - VmExecutionStopReason, VmTracer, ZkSyncVmState, +use multivm::vm_latest::{ + constants::BOOTLOADER_HEAP_PAGE, BootloaderState, HistoryMode, SimpleMemory, VmTracer, + ZkSyncVmState, }; +use once_cell::sync::OnceCell; use zksync_basic_types::U256; use zksync_state::WriteStorage; @@ -82,11 +82,15 @@ pub struct BootloaderDebugTracer { pub result: Arc>>, } -impl DynTracer for BootloaderDebugTracer {} +impl DynTracer> for BootloaderDebugTracer {} -impl ExecutionEndTracer for BootloaderDebugTracer {} +fn load_debug_slot(memory: &SimpleMemory, slot: usize) -> U256 { + memory + .read_slot(BOOTLOADER_HEAP_PAGE as usize, DEBUG_START_SLOT + slot) + .value +} -impl ExecutionProcessing for BootloaderDebugTracer { +impl VmTracer for BootloaderDebugTracer { fn after_vm_execution( &mut self, state: &mut ZkSyncVmState, @@ -99,16 +103,6 @@ impl ExecutionProcessing for BootloaderDe } } -fn load_debug_slot(memory: &SimpleMemory, slot: usize) -> U256 { - memory - .read_slot(BOOTLOADER_HEAP_PAGE as usize, DEBUG_START_SLOT + slot) - .value -} - -impl VmTracer for BootloaderDebugTracer { - fn save_results(&mut self, _result: &mut VmExecutionResultAndLogs) {} -} - impl BootloaderDebug { pub fn load_from_memory( memory: &SimpleMemory, diff --git a/src/cache.rs b/src/cache.rs index 4e9fd2bc..713bc850 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -50,6 +50,7 @@ pub(crate) struct Cache { block_raw_transactions: FxHashMap>, transactions: FxHashMap, bridge_addresses: Option, + confirmed_tokens: FxHashMap<(u32, u8), Vec>, } impl Cache { @@ -158,6 +159,32 @@ impl Cache { self.block_raw_transactions.get(number) } + /// Returns the cached confirmed tokens. + pub(crate) fn get_confirmed_tokens( + &self, + from: u32, + limit: u8, + ) -> Option<&Vec> { + if matches!(self.config, CacheConfig::None) { + return None; + } + self.confirmed_tokens.get(&(from, limit)) + } + + /// Cache confirmed tokens + pub(crate) fn set_confirmed_tokens( + &mut self, + from: u32, + limit: u8, + confirmed_tokens: Vec, + ) { + if matches!(self.config, CacheConfig::None) { + return; + } + self.confirmed_tokens + .insert((from, limit), confirmed_tokens); + } + /// Cache the raw transactions for the provided block number. pub(crate) fn insert_block_raw_transactions( &mut self, diff --git a/src/configuration_api.rs b/src/configuration_api.rs deleted file mode 100644 index 868c7b95..00000000 --- a/src/configuration_api.rs +++ /dev/null @@ -1,231 +0,0 @@ -// Built-in uses -use std::sync::{Arc, RwLock}; - -// External uses -use jsonrpc_core::Result; -use jsonrpc_derive::rpc; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_web3_decl::error::Web3Error; - -// Workspace uses - -// Local uses -use crate::{ - node::InMemoryNodeInner, - node::ShowCalls, - node::ShowVMDetails, - node::{ShowGasDetails, ShowStorageLogs}, - observability::LogLevel, -}; - -pub struct ConfigurationApiNamespace { - node: Arc>>, -} - -impl ConfigurationApiNamespace { - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} - -#[rpc] -pub trait ConfigurationApiNamespaceT { - /// Get the InMemoryNodeInner's show_calls property as a string - /// - /// # Returns - /// The current `show_calls` value for the InMemoryNodeInner. - #[rpc(name = "config_getShowCalls", returns = "String")] - fn config_get_show_calls(&self) -> Result; - - /// Get the InMemoryNodeInner's current_timestamp property - /// - /// # Returns - /// The current `current_timestamp` value for the InMemoryNodeInner. - #[rpc(name = "config_getCurrentTimestamp", returns = "u64")] - fn config_get_current_timestamp(&self) -> Result; - - /// Set show_calls for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowCalls enum to update show_calls to - /// - /// # Returns - /// The updated/current `show_calls` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowCalls", returns = "String")] - fn config_set_show_calls(&self, value: String) -> Result; - - /// Set show_storage_logs for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowStorageLogs enum to update show_storage_logs to - /// - /// # Returns - /// The updated/current `show_storage_logs` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowStorageLogs", returns = "String")] - fn config_set_show_storage_logs(&self, value: String) -> Result; - - /// Set show_vm_details for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowVMDetails enum to update show_vm_details to - /// - /// # Returns - /// The updated/current `show_vm_details` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowVmDetails", returns = "String")] - fn config_set_show_vm_details(&self, value: String) -> Result; - - /// Set show_gas_details for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A ShowGasDetails enum to update show_gas_details to - /// - /// # Returns - /// The updated/current `show_gas_details` value for the InMemoryNodeInner. - #[rpc(name = "config_setShowGasDetails", returns = "String")] - fn config_set_show_gas_details(&self, value: String) -> Result; - - /// Set resolve_hashes for the InMemoryNodeInner - /// - /// # Parameters - /// - `value`: A bool to update resolve_hashes to - /// - /// # Returns - /// The updated `resolve_hashes` value for the InMemoryNodeInner. - #[rpc(name = "config_setResolveHashes", returns = "bool")] - fn config_set_resolve_hashes(&self, value: bool) -> Result; - - /// Set the logging for the InMemoryNodeInner - /// - /// # Parameters - /// - `level`: The log level to set. One of: ["trace", "debug", "info", "warn", "error"] - /// - /// # Returns - /// `true` if the operation succeeded, `false` otherwise. - #[rpc(name = "config_setLogLevel", returns = "bool")] - fn config_set_log_level(&self, level: LogLevel) -> Result; - - /// Set the logging for the InMemoryNodeInner - /// - /// # Parameters - /// - `level`: The logging directive to set. Example: - /// * "my_crate=debug" - /// * "my_crate::module=trace" - /// * "my_crate=debug,other_crate=warn" - /// - /// # Returns - /// `true` if the operation succeeded, `false` otherwise. - #[rpc(name = "config_setLogging", returns = "bool")] - fn config_set_logging(&self, directive: String) -> Result; -} - -impl ConfigurationApiNamespaceT - for ConfigurationApiNamespace -{ - fn config_get_show_calls(&self) -> Result { - let reader = self.node.read().unwrap(); - Ok(reader.show_calls.to_string()) - } - - fn config_get_current_timestamp(&self) -> Result { - let reader = self.node.read().unwrap(); - Ok(reader.current_timestamp) - } - - fn config_set_show_calls(&self, value: String) -> Result { - let show_calls = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_calls.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_calls = show_calls; - Ok(inner.show_calls.to_string()) - } - - fn config_set_show_storage_logs(&self, value: String) -> Result { - let show_storage_logs = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_storage_logs.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_storage_logs = show_storage_logs; - Ok(inner.show_storage_logs.to_string()) - } - - fn config_set_show_vm_details(&self, value: String) -> Result { - let show_vm_details = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_vm_details.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_vm_details = show_vm_details; - Ok(inner.show_vm_details.to_string()) - } - - fn config_set_show_gas_details(&self, value: String) -> Result { - let show_gas_details = match value.parse::() { - Ok(value) => value, - Err(_) => { - let reader = self.node.read().unwrap(); - return Ok(reader.show_gas_details.to_string()); - } - }; - - let mut inner = self.node.write().unwrap(); - inner.show_gas_details = show_gas_details; - Ok(inner.show_gas_details.to_string()) - } - - fn config_set_resolve_hashes(&self, value: bool) -> Result { - let mut inner = self.node.write().unwrap(); - inner.resolve_hashes = value; - Ok(inner.resolve_hashes) - } - - fn config_set_log_level(&self, level: LogLevel) -> Result { - if let Some(observability) = &self - .node - .read() - .map_err(|_| into_jsrpc_error(Web3Error::InternalError))? - .observability - { - match observability.set_log_level(level.clone()) { - Ok(_) => tracing::info!("set log level to '{}'", level), - Err(err) => { - tracing::error!("failed setting log level {:?}", err); - return Ok(false); - } - } - } - Ok(true) - } - - fn config_set_logging(&self, directive: String) -> Result { - if let Some(observability) = &self - .node - .read() - .map_err(|_| into_jsrpc_error(Web3Error::InternalError))? - .observability - { - match observability.set_logging(&directive) { - Ok(_) => tracing::info!("set logging to '{}'", directive), - Err(err) => { - tracing::error!("failed setting logging to '{}': {:?}", directive, err); - return Ok(false); - } - } - } - Ok(true) - } -} diff --git a/src/deps/contracts/AccountCodeStorage.json b/src/deps/contracts/AccountCodeStorage.json index 61372171..b30e4be2 100644 --- a/src/deps/contracts/AccountCodeStorage.json +++ b/src/deps/contracts/AccountCodeStorage.json @@ -110,8 +110,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000000030210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000020320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab50fa76bcb7e06b47bab35dc6b1c5088e6df5f505ae348ae7035a329122d208", - "deployedBytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000000030210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000020320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab50fa76bcb7e06b47bab35dc6b1c5088e6df5f505ae348ae7035a329122d208", + "bytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000001000210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000ff0320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003feb461a4c407970c4055ef207f89a1b4d8d50098197240a59e39b0630ca7988", + "deployedBytecode": "0x00030000000000020002000000000002000200000001035500000060011002700000007c0010019d000100000000001f0000008001000039000000400010043f0000000101200190000000370000c13d0000000001000031000000040110008c000000ef0000413d0000000201000367000000000101043b000000e0011002700000007e0210009c0000003f0000213d000000820210009c000000620000613d000000830210009c000000820000613d000000840110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b000000870210009c000000ef0000213d000000000101041a000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d0000002001000039000001000010044300000120000004430000007d01000041000001ed0001042e0000007f0210009c000000af0000613d000000800210009c000000d90000613d000000810110009c000000ef0000c13d0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b01ec015f0000040f000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002020003670000000401200370000000000101043b000000870310009c000000ef0000213d0000002402200370000000000202043b0000000003000411000080060330008c000001050000c13d00000088032001980000011a0000c13d000000000021041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000101043b0000008701100197000001000210008c00000000020000190000000102004039000000000101041a000000000301004b00000000030000190000000103006039000000000232019f0000008803100197000000890330009c0000000003000019000000010300603900000000023201a0000000db011002700000008b01100197000000000100c019000000400200043d00000000001204350000007c010000410000007c0320009c0000000001024019000000400110021000000086011001c7000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000400310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000002010003670000000402100370000000000302043b000000870230009c000000ef0000213d0000002401100370000000000101043b000200000001001d0000000001000411000080060110008c00000000010000190000000101006039000100000003001d01ec012f0000040f00000002010000290000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000002010000290000000102000029000000000012041b0000000001000019000001ed0001042e0000000001000416000000000101004b000000ef0000c13d000000040100008a00000000011000310000008502000041000000200310008c000000000300001900000000030240190000008501100197000000000401004b000000000200a019000000850110009c00000000010300190000000001026019000000000101004b000000ef0000c13d00000004010000390000000201100367000000000201043b000000870120009c000000f10000a13d0000000001000019000001ee000104300000000001000411000080060110008c00000000010000190000000101006039000200000002001d01ec012f0000040f0000000201000029000000000101041a000100000001001d0000008801100197000000890110009c0000000001000019000000010100603901ec01470000040f00000001010000290000008a011001970000000202000029000000000012041b0000000001000019000001ed0001042e000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000400100043d00000064021000390000009003000041000000000032043500000044021000390000009103000041000000000032043500000024021000390000002b0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b000001320000613d000000000001042d000000400100043d00000064021000390000008c03000041000000000032043500000044021000390000008d03000041000000000032043500000024021000390000002d0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee00010430000000000101004b0000014a0000613d000000000001042d000000400100043d00000064021000390000009203000041000000000032043500000044021000390000009303000041000000000032043500000024021000390000002e0300003900000000003204350000008e0200004100000000002104350000000402100039000000200300003900000000003204350000007c020000410000007c0310009c000000000102801900000040011002100000008f011001c7000001ee000104300002000000000002000000000201001900000094010000410000008702200197000000ff0320008c000001b80000a13d000000000302041a000000000103004b0000016e0000613d00000088013001970000009402000041000000890110009c00000000010300190000000001026019000001b80000013d000100000003001d000000400400043d000200000004001d00000095010000410000000000140435000000040140003900000000002104350000007c0100004100000000020004140000007c0320009c00000000020180190000007c0340009c00000000010440190000004001100210000000c002200210000000000112019f00000096011001c7000080030200003901ec01e70000040f000000020a000029000000000301001900000060033002700000007c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001940000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018c0000413d000000000705004b000001a30000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000001b90000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000000970410009c000001df0000213d0000000102200190000001df0000c13d000000400010043f0000001f0130008c000001e50000a13d000000940100004100000000020a0433000000000202004b0000000103000029000001680000613d000000000001042d000000400200043d0000001f0430018f0000000503300272000001c60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001be0000413d000000000504004b000001d50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000007c0100004100000001030000310000007c0430009c00000000030180190000007c0420009c000000000102401900000040011002100000006002300210000000000112019f000001ee00010430000000980100004100000000001004350000004101000039000000040010043f0000009601000041000001ee000104300000000001000019000001ee00010430000001ea002104230000000102000039000000000001042d0000000002000019000000000001042d000001ec00000432000001ed0001042e000001ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000004f1e1bdf000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000e03fe177000000000000000000000000000000000000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000001806aa18000000000000000000000000000000000000000000000000000000004de2e46880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000001fffe07374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000656420636f6e7472616374000000000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e7374727563746f6e20636f6e7374727563746f72000000000000000000000000000000000000436f64652068617368206973206e6f7420666f72206120636f6e747261637420c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4705aa9b6b5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003feb461a4c407970c4055ef207f89a1b4d8d50098197240a59e39b0630ca7988", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/BootloaderUtilities.json b/src/deps/contracts/BootloaderUtilities.json index 4e7353c7..31da8323 100644 --- a/src/deps/contracts/BootloaderUtilities.json +++ b/src/deps/contracts/BootloaderUtilities.json @@ -110,8 +110,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f727465642074782074797065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000489bc9fb7e3517c248d1d2be1896ed4d64fc66e2e08d832a584baa46f011fd03", - "deployedBytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f727465642074782074797065000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000489bc9fb7e3517c248d1d2be1896ed4d64fc66e2e08d832a584baa46f011fd03", + "bytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f72746564207478207479706500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b2bf42e5ab5127f48669ab36579badd217fbd10998091dbba6028927708cf2", + "deployedBytecode": "0x0004000000000002000d00000000000200000000030100190000006003300270000009480430019700030000004103550002000000010355000009480030019d000100000000001f000000800a0000390000004000a0043f0000000101200190000000910000c13d0000000001000031000000040110008c0000083e0000413d0000000201000367000000000101043b0000094a011001970000094b0110009c0000083e0000c13d0000000001000416000000000101004b0000083e0000c13d0000000001000031000000040310008a0000094c02000041000000200430008c000000000400001900000000040240190000094c05300197000000000605004b000000000200a0190000094c0550009c000000000204c019000000000202004b0000083e0000c13d00000002020003670000000404200370000000000904043b0000094d0490009c0000083e0000213d00000000039300490000094c04000041000002600530008c000000000500001900000000050440190000094c03300197000000000603004b000000000400a0190000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000403900039000d00000003001d000000000332034f000000000303043b000000000403004b000000990000c13d000c00000009001d0000010401900039000000000112034f000000000101043b000000800210008c000000d70000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b090000290000000003390436000000210420003900000005044002720000007d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000750000413d000000000400004b0000007f0000613d0000000004090433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000001bc0000013d0000000001000416000000000101004b0000083e0000c13d00000020010000390000010000100443000001200000044300000949010000410000251d0001042e000000710430008c000000e10000c13d000001c403900039000000000332034f000000230400008a0000000004940049000b00000004001d0000000004140019000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d00000000010004140000000004320019000000000224004b0000000002000019000000010200403900000948033001970000000102200190000000d10000c13d0000000002000031000000000542004b0000041b0000813d000009700100004100000000001004350000001101000039000000040010043f00000971010000410000251e00010430000000400200043d000b00000002001d000009530220009c0000013e0000a13d000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000000020130008c000001560000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c0000028d0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000012b0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001230000413d000000000500004b0000012d0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000002aa0000013d0000000b070000290000004002700039000000400020043f0000000102000039000000000227043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000001460000413d0000000003070433000000000303004b000001b30000c13d000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000010130008c0000020d0000c13d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039000c00000009001d251c25120000040f00000001022001900000083e0000613d000000000201043b000000800120008c000002fb0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001a00000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001980000413d000000000500004b000001a20000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000003180000013d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f00000000001204350000000c01000029000000a4011000390000000201100367000000000201043b000000800120008c0000021f0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000001fa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000001f20000413d000000000500004b000001fc0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000023c0000013d000000400100043d00000044021000390000094e0300004100000000003204350000002402100039000000170300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002290000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000064022000390000000202200367000000000302043b000000800230008c000003690000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000027a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002720000413d000000000600004b0000027c0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000003860000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000002970000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000302043b000000800230008c000004320000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000002e80000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000002e00000413d000000000600004b000002ea0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000044f0000013d000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000003050000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000c0200002900000104022000390000000202200367000000000202043b000000800320008c0000068b0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000003560000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000034e0000413d000000000600004b000003580000613d0000000006030433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000006a80000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000003730000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000003940000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b0000038d0000413d000000000134001900000000000104350000000003020433000000000403004b000003a10000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000039a0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d0000000c0400002900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000007f00000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000704000029000000000334043600000021042000390000000504400272000004060000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003fe0000413d000000000400004b000004080000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000008100000013d000a0000000a001d000c00000009001d00000002033003670000095d0510009c000004a00000413d000000400100043d00000044021000390000096f0300004100000000003204350000002402100039000000080300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000043c0000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f00000000003404350000000c03000029000000c4033000390000000203300367000000000303043b000000800430008c000007140000413d0000008004300270000009550530009c000000000403a019000009550530009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000048d0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000004850000413d000000000700004b0000048f0000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c000000000300201900000021054000390000000000350435000007310000013d0000000002420049000009480220019700000000022303df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000006f90000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000004cb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004c30000413d000000000400004b000004cd0000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000004dd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000004d50000413d000000000604004b000004ec0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d00000000040000310000000b0200002900000000052400190000000c0200002900000204032000390000000202000367000000000332034f000000000303043b0000094c06000041000000000753004b000000000700001900000000070680190000094c055001970000094c08300197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000001010433000900000001001d0000000d010000290000000001130019000000000312034f000000000503043b0000094d0350009c0000083e0000213d0000000503500210000000000434004900000020061000390000094c01000041000000000746004b000000000700001900000000070120190000094c044001970000094c08600197000000000948004b0000000001008019000000000448013f0000094c0440009c000000000107c019000000000101004b0000083e0000c13d000000400100043d000000200410003900000961055001980000052b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000005230000413d000000000200004b0000052d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b000000000300001900000001030040390000094d0520009c000000db0000213d0000000103300190000000db0000c13d000000400020043f0000094802000041000009480340009c0000000003020019000000000304401900000040033002100000000001010433000009480410009c00000000010280190000006001100210000000000131019f0000000003000414000009480430009c0000000002034019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c030000290000083e0000613d00000000020000310000000b04000029000000000542001900000224043000390000000203000367000000000443034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000101043b000b00000001001d000000000105004b0000083e0000c13d0000000d010000290000000004140019000000000143034f000000000101043b0000094d0310009c0000083e0000213d000000000212004900000020034000390000094c04000041000000000523004b000000000500001900000000050420190000094c022001970000094c06300197000000000726004b0000000004008019000000000226013f0000094c0220009c00000000020500190000000002046019000000000202004b0000083e0000c13d0000000002000414000000000131001a0000094804300197000000d10000413d0000000003000031000000000513004b000000d10000413d0000000204400367000009480520009c000004200000213d0000000001130049000009480110019700000000011403df000000c0022002100000095e022001970000095f022001c700000000012103af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d00000948033001970003000000010355000000010220019000000ff30000613d0000003f013000390000096001100197000000400200043d0000000001120019000000000421004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f00000000013204360000001f043000390000000504400272000005b10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005a90000413d000000000400004b000005b30000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f0000000503300272000005c30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005bb0000413d000000000604004b000005d20000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000e570000c13d0000000c0b0000290000006402b000390000000203000367000000000523034f0000004402b00039000000000423034f0000002402b00039000000000623034f0000008402b00039000000a407b00039000000c408b00039000000e409b00039000001040ab00039000001240bb00039000000000bb3034f000000000aa3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000d02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000a0a043b000000000b0b043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c1000390000000b0d0000290000000000dc0435000001800c100039000000090d0000290000000000dc0435000001600c1000390000000000bc0435000001400b1000390000000000ab0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000962030000410000000000320435000001c0030000390000000000310435000009630310009c000000db0000213d000001e003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000900000001001d000000400100043d000b00000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000a0400002900000001022001900000083e0000613d0000000b050000290000002002500039000000000101043b00000964030000410000000000320435000000800350003900000000001304350000006001500039000009650300004100000000003104350000004001500039000009660300004100000000003104350000000000450435000009670150009c000000db0000213d0000000b04000029000000a001400039000000400010043f0000094801000041000009480320009c000000000201801900000040022002100000000003040433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000301043b000000400100043d0000004202100039000000090400002900000000004204350000002002100039000009680400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000009690310009c000000db0000213d0000008003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400300043d000009530430009c000000db0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006950000413d0000000005030433000000000505004b000001500000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000c02000029000000a4022000390000000202200367000000000202043b000000800420008c000007820000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000000db0000213d0000000107700190000000db0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000006e60000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000006de0000413d000000000700004b000006e80000613d0000000007040433000000000707004b000001500000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000079f0000013d0000001f0430018f0000000502300272000007040000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000006fd0000413d000000000504004b000007120000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000071e0000413d0000000006040433000000000606004b000001500000613d000000f8063002100000094c07000041000000000303004b0000000003060019000000000307601900000000060504330000095406600197000000000336019f00000000003504350000000c03000029000000a4033000390000000203300367000000000303043b000000800530008c000008400000413d0000008005300270000009550630009c000000000503a019000009550630009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000076f0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007670000413d000000000800004b000007710000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c0000000003002019000000210650003900000000003604350000085d0000013d000000400400043d000009530540009c000000db0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000078c0000413d0000000006040433000000000606004b000001500000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000c0200002900000064022000390000000202200367000000000202043b000000800520008c000008ae0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000000db0000213d0000000108800190000000db0000c13d000000400070043f0000000207600039000000000775043600000021086000390000000508800272000007dd0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000007d50000413d000000000800004b000007df0000613d0000000008050433000000000808004b000001500000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000008cb0000013d000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000007fc0000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a0000000c020000290000000004210049000001c4012000390000000202000367000600000001001d000000000112034f000000000101043b0000000003000031000500000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b000009aa0000613d00000000010000190000251e00010430000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a0000084a0000413d0000000007050433000000000707004b000001500000613d000000f8073002100000094c08000041000000000303004b0000000003070019000000000308601900000000070604330000095407700197000000000337019f00000000003604350000000c0300002900000064033000390000000203300367000000000303043b000000800630008c0000092c0000413d0000008006300270000009550730009c000000000603a019000009550730009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000000db0000213d0000000109900190000000db0000c13d000000400080043f00000002087000390000000008860436000000210970003900000005099002720000089b0000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000008930000413d000000000900004b0000089d0000613d0000000009060433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c000000000300201900000021076000390000000000370435000009490000013d000000400500043d000009530650009c000000db0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000008b80000413d0000000007050433000000000707004b000001500000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c000000db0000213d0000000c0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c000009cb0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c000000db0000213d000000010aa00190000000db0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa00272000009190000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b000009110000413d000000000a00004b0000091b0000613d000000000a070433000000000a0a004b000001500000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c000000000200201900000021087000390000000000280435000009e80000013d000000400600043d000009530760009c000000db0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000009360000413d0000000008060433000000000808004b000001500000613d000000f8083002100000094c09000041000000000303004b0000000003080019000000000309601900000000080704330000095408800197000000000338019f0000000000370435000000400700043d000009530370009c000000db0000213d0000000c0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000ac60000413d0000008008300270000009550930009c000000000803a019000009550930009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000000db0000213d000000010bb00190000000db0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000009970000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b0000098f0000413d000000000b00004b000009990000613d000000000b080433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000ae30000013d000000010410008c00000a900000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b00000bb50000c13d000000400100043d000400000001001d000009530110009c000000db0000213d00000004030000290000004001300039000000400010043f0000002001300039000009560200004100000000002104350000000101000039000000000013043500000bb50000013d000000400700043d000009530870009c000000db0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000009d50000413d0000000009070433000000000909004b000001500000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b000009f50000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b000009ee0000413d000000000189001900000000000104350000000008030433000000000908004b00000a020000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b000009fb0000413d000000000118001900000000000104350000000003040433000000000803004b00000a0f0000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00000a080000413d000000000113001900000000000104350000000003050433000000000403004b00000a1c0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00000a150000413d000000000113001900000000000104350000000003060433000000000403004b00000a290000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00000a220000413d000000000113001900000000000104350000000003070433000000000403004b00000a360000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00000a2f0000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f03100039000000200100008a000000000313016f0000000005230019000000000335004b000000000300001900000001030040390000094d0450009c000000db0000213d0000000103300190000000db0000c13d000000400050043f000000230300008a0000000c060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e690000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000ee70000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000ee70000013d000000380210008c00000b980000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000009530440009c000000db0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000aae0000413d00000004040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf00000004020000290000002102200039000000000012043500000bb50000013d000000400800043d000009530980009c000000db0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000ad00000413d000000000a080433000000000a0a004b000001500000613d000000f80a3002100000094c0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000009540aa0019700000000033a019f0000000000390435000000400300043d0000002009300039000000000a010433000000000b0a004b00000af00000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b00000ae90000413d00000000019a001900000000000104350000000009020433000000000a09004b00000afd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c2a0019000000000c0c04330000000000cb0435000000000b9a004b00000af60000413d000000000119001900000000000104350000000002040433000000000902004b00000b0a0000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a29004b00000b030000413d000000000112001900000000000104350000000002050433000000000402004b00000b170000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000924004b00000b100000413d000000000112001900000000000104350000000002060433000000000402004b00000b240000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000524004b00000b1d0000413d000000000112001900000000000104350000000002070433000000000402004b00000b310000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000524004b00000b2a0000413d000000000112001900000000000104350000000002080433000000000402004b00000b3e0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000524004b00000b370000413d000000000112001900000000000104350000000001310049000000200210008a00000000002304350000001f02100039000000200100008a000000000212016f0000000005320019000000000225004b000000000200001900000001020040390000094d0450009c000000db0000213d0000000102200190000000db0000c13d000000400050043f000000230200008a0000000c060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b000000000800003100000000094800190000094c0a000041000000000b96004b000000000b000019000000000b0a80190000094c099001970000094c0c600197000000000d9c004b000000000a00801900000000099c013f0000094c0990009c00000000090b001900000000090a6019000000000909004b0000083e0000c13d0000000d090000290000000009960019000000000697034f000000000606043b0000094d0a60009c0000083e0000213d000000000a68004900000020089000390000094c09000041000000000ba8004b000000000b000019000000000b0920190000094c0aa001970000094c0c800197000000000dac004b0000000009008019000000000aac013f0000094c0aa0009c00000000090bc019000000000909004b0000083e0000c13d000000010960008c00000e9b0000c13d000000000687034f000000000606043b000000010700008a0000094c08000041000000000776004b000000000700001900000000070820190000094c066001970000094c0960009c00000000080080190000094c066001670000094c0660009c00000000070860190000006006000039000000000707004b00000f7a0000c13d000009530650009c000000db0000213d0000004006500039000000400060043f00000020065000390000095607000041000000000076043500000001060000390000000000650435000000000605001900000f7a0000013d000000400200043d000400000002001d000009530220009c000000db0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000ba40000413d00000004030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000060010000390000000c0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b00000c2a0000c13d0000000603000029000000000432034f000000000300003100000005050000290000000005530019000000000904043b0000094c04000041000000000659004b000000000600001900000000060480190000094c055001970000094c07900197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d0000000b0400002900000000040404330000000a0500002900000000050504330000000906000029000000000606043300000007070000290000000007070433000000040800002900000000080804330000000d0a0000290000000009a90019000000000292034f000000000202043b0000094d0a20009c0000083e0000213d000000000323004900000020099000390000094c0a000041000000000b39004b000000000b000019000000000b0a20190000094c033001970000094c09900197000000000c39004b000000000a008019000000000339013f0000094c0330009c00000000030b001900000000030a6019000000000303004b0000083e0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000094d02200197000000380320008c00000cc20000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a00000c140000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf0000002103500039000000000023043500000cdc0000013d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000101043b000000800210008c00000c840000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000804000029000000000442016f000000400200043d0000000004420019000000000524004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f000000020430003900000000044204360000002105300039000000050550027200000c710000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00000c690000413d000000000500004b00000c730000613d0000000005020433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c00000000010020190000002103200039000000000013043500000ca10000013d000000400200043d000009530320009c000000db0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000c8e0000413d0000000004020433000000000404004b000001500000613d000000f8041002100000094c05000041000000000101004b0000000001040019000000000105601900000000040304330000095404400197000000000114019f0000000000130435000000400100043d00000020031000390000000004020433000000000504004b00000cae0000613d000000000500001900000000063500190000002005500039000000000725001900000000070704330000000000760435000000000645004b00000ca70000413d00000000023400190000096a03000041000000000032043500000000021200490000001e0320008a000000000031043500000021022000390000000803000029000000000332016f0000000002130019000000000332004b000000000300001900000001030040390000094d0420009c000000db0000213d0000000103300190000000db0000c13d000000400020043f000000020200036700000bbd0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a00000ccc0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000503000029000000000632001900000002030003670000000604000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b00000d140000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b00000d0d0000413d000000000537001900000000000504350000000b0b00002900000000070b0433000000000807004b00000d220000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d1b0000413d000000000557001900000000000504350000000a0b00002900000000070b0433000000000807004b00000d300000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d290000413d00000000055700190000000000050435000000090b00002900000000070b0433000000000807004b00000d3e0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d370000413d00000000055700190000000000050435000000070b00002900000000070b0433000000000807004b00000d4c0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d450000413d00000000055700190000000000050435000000040b00002900000000070b0433000000000807004b00000d5a0000613d000000000800001900000000095800190000002008800039000000000ab80019000000000a0a04330000000000a90435000000000978004b00000d530000413d00000000055700190000001f0740018f00000000000504350000000206600367000000050840027200000d690000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000d610000413d000000000907004b00000d780000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b00000d850000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b00000d7e0000413d000000000145001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b0000290000083e0000613d00000002020003670000000d03000029000000000332034f000000000101043b000c00000001001d000000000103043b000000710310008c0000100e0000c13d000001e401b00039000000000312034f00000000010000310000000004b10049000000230440008a000000000303043b0000094c05000041000000000643004b000000000600001900000000060580190000094c044001970000094c07300197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000003430019000000000232034f000000000202043b0000094d0420009c0000083e0000213d000000000121004900000020033000390000094c04000041000000000513004b000000000500001900000000050420190000094c011001970000094c06300197000000000716004b0000000004008019000000000116013f0000094c0110009c00000000010500190000000001046019000000000101004b0000083e0000c13d0000000001000414000000000232001a0000094804300197000000d10000413d0000000003000031000000000523004b000000d10000413d0000000204400367000009480510009c000004200000213d0000000002230049000009480220019700000000022403df000000c0011002100000095e011001970000095f011001c700000000011203af0000801002000039251c25170000040f00000000030100190000006003300270000109480030019d000009480330019700030000000103550000000102200190000013900000613d0000003f013000390000096002100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000094d0520009c000000db0000213d0000000104400190000000db0000c13d000000400020043f00000000023104360000001f04300039000000050440027200000e110000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000e090000413d000000000400004b00000e130000613d0000000104000031000000000443004b0000083e0000213d00000003050003670000001f0430018f000000050330027200000e230000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000e1b0000413d000000000604004b00000e320000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000e570000c13d0000000002020433000000400100043d0000004003100039000000000023043500000020021000390000000c030000290000000000320435000000400300003900000000003104350000096d0310009c000000db0000213d0000006003100039000000400030043f0000094803000041000009480420009c000000000203801900000040022002100000000001010433000009480410009c00000000010380190000006001100210000000000121019f0000000002000414000009480420009c0000000002038019000000c002200210000000000112019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400100043d00000044021000390000096c03000041000000000032043500000024021000390000001f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000380760008c00000ecd0000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e840000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000ee70000013d000000380760008c00000f600000413d0000002007600270000009480860009c00000000080600190000000008072019000009480760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000009530950009c000000db0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000eb60000413d0000000009050433000000000909004b000001500000613d00000000090804330000095409900197000000f80a70021000000000099a019f00000958099001c700000000009804350000000307700210000000f80770008900000000067601cf00000021075000390000000000670435000000000605001900000f7a0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000ed60000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000ef10000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009020433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000010640000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000f4a0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000107d0000013d000009530750009c000000db0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000f690000413d0000000008050433000000000808004b000001500000613d000000f80660021000000000080704330000095408800197000000000668019f0000094c0660016700000000006704350000000006050019000000400500043d000009530750009c000000db0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000f840000413d0000000009050433000000000909004b000001500000613d0000000009070433000009540990019700000959099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b0000094c0a000041000000000d9c004b000000000d000019000000000d0a80190000094c099001970000094c0ec00197000000000f9e004b000000000a00801900000000099e013f0000094c0990009c00000000090d001900000000090a6019000000000909004b0000083e0000c13d0000000009030433000000000a0604330000000d0d000029000000000cdc0019000000000bcb034f000000000b0b043b0000094d0db0009c0000083e0000213d0000000007b70049000000200cc000390000094c0d000041000000000e7c004b000000000e000019000000000e0d20190000094c077001970000094c0cc00197000000000f7c004b000000000d00801900000000077c013f0000094c0770009c00000000070e001900000000070d6019000000000707004b0000083e0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000094d09700197000000380790008c000011250000413d0000002007900270000009480890009c000000000709a019000009480890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000009530b70009c000000db0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a00000fdd0000413d000000000b070433000000000b0b004b000001500000613d000000000b0a0433000009540bb00197000000f80c800210000000000bbc019f0000095a0bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf000000210970003900000000008904350000113e0000013d0000001f0430018f000000050230027200000ffe0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ff70000413d000000000504004b0000100c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000000301004b000011200000c13d0000010401b00039000000000112034f000000000101043b000000800210008c000011e10000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000b00000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f00000002032000390000000b040000290000000003340436000000210420003900000005044002720000104f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000010470000413d000000000400004b000010510000613d0000000b040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000b0200002900000021022000390000000000120435000012010000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000106d0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b0000094c0a000041000000000b83004b000000000b000019000000000b0a80190000094c088001970000094c0c300197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000003830019000000000434034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020093000390000094c03000041000000000a49004b000000000a000019000000000a0320190000094c044001970000094c0b900197000000000c4b004b000000000300801900000000044b013f0000094c0440009c00000000030ac019000000000303004b0000083e0000c13d000000400300043d00000020043000390000095b0a0000410000000000a40435000000210a300039000000000b070433000000000c0b004b000010b50000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b000010ae0000413d0000000007ab00190000000000070435000000000a020433000000000b0a004b000010c20000613d000000000b000019000000000c7b0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000cab004b000010bb0000413d00000000027a001900000000000204350000000007060433000000000a07004b000010cf0000613d000000000a000019000000000b2a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000010c80000413d00000000022700190000001f0680018f000000000002043500000002079003670000000509800272000010de0000613d000000000a000019000000050ba00210000000000cb20019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000010d60000413d000000000a06004b000010ed0000613d0000000509900210000000000797034f00000000099200190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000282001900000000000204350000000006050433000000000706004b000010fa0000613d000000000700001900000000082700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000010f30000413d000000000226001900000000000204350000000002320049000000200520008a00000000005304350000001f02200039000000000212016f0000000001320019000000000221004b000000000200001900000001020040390000094d0510009c000000db0000213d0000000102200190000000db0000c13d000000400010043f0000094801000041000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000020210008c000012510000c13d0000000d01000029251c1e500000040f000012550000013d000000400700043d000009530a70009c000000db0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a0000112e0000413d000000000a070433000000000a0a004b000001500000613d000000f809900210000000000a080433000009540aa001970000000009a9019f00000959099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b0000094c0a000041000000000b82004b000000000b000019000000000b0a80190000094c088001970000094c0c200197000000000d8c004b000000000a00801900000000088c013f0000094c0880009c00000000080b001900000000080a6019000000000808004b0000083e0000c13d0000000d080000290000000002820019000000000424034f000000000804043b0000094d0480009c0000083e0000213d000000000489004900000020092000390000094c02000041000000000a49004b000000000a000019000000000a0220190000094c044001970000094c0b900197000000000c4b004b000000000200801900000000044b013f0000094c0440009c00000000020ac019000000000202004b0000083e0000c13d000000400200043d00000020042000390000095c0a0000410000000000a40435000000210a200039000000000b070433000000000c0b004b000011760000613d000000000c000019000000000dac0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dbc004b0000116f0000413d0000000007ab00190000000000070435000000000a030433000000000b0a004b000011830000613d000000000b000019000000000c7b0019000000200bb00039000000000d3b0019000000000d0d04330000000000dc0435000000000cab004b0000117c0000413d00000000037a001900000000000304350000000007060433000000000a07004b000011900000613d000000000a000019000000000b3a0019000000200aa00039000000000c6a0019000000000c0c04330000000000cb0435000000000b7a004b000011890000413d00000000033700190000001f0680018f0000000000030435000000020790036700000005098002720000119f0000613d000000000a000019000000050ba00210000000000cb30019000000000bb7034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000011970000413d000000000a06004b000011ae0000613d0000000509900210000000000797034f00000000099300190000000306600210000000000a090433000000000a6a01cf000000000a6a022f000000000707043b0000010006600089000000000767022f00000000066701cf0000000006a6019f0000000000690435000000000383001900000000000304350000000006050433000000000706004b000011bb0000613d000000000700001900000000083700190000002007700039000000000957001900000000090904330000000000980435000000000867004b000011b40000413d000000000336001900000000000304350000000003230049000000200530008a00000000005204350000001f03300039000000000313016f0000000001230019000000000331004b000000000300001900000001030040390000094d0510009c000000db0000213d0000000103300190000000db0000c13d000000400010043f0000094801000041000009480340009c0000000003010019000000000304401900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000000c0b00002900000daa0000c13d0000083e0000013d000000400200043d000b00000002001d000009530220009c000000db0000213d0000000b030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000011ed0000413d0000000b030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000a401b000390000000201100367000000000201043b000000800120008c000012710000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000123e0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000012360000413d000000000500004b000012400000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000128e0000013d000000010110008c000012600000c13d0000000d01000029251c18090000040f000000400200043d00000020032000390000000c04000029000000000043043500000000001204350000094801000041000009480320009c000000000102401900000040011002100000096e011001c70000251d0001042e000000400200043d000d00000002001d0000094f0100004100000000001204350000000401200039251c17ff0000040f0000000d0400002900000000014100490000094802000041000009480310009c0000000001028019000009480340009c000000000204401900000040022002100000006001100210000000000121019f0000251e00010430000000400100043d000009530310009c000000db0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000127b0000413d0000000004010433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000006402b000390000000202200367000000000302043b000000800230008c000012de0000413d0000008002300270000009550430009c000000000203a019000009550430009c0000000004000019000000100400203900000008054001bf0000094d0620009c000000000405201900000040052002700000094d0620009c000000000205201900000004054001bf000009480620009c00000000040520190000002005200270000009480620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b000000000600001900000001060040390000094d0750009c000000db0000213d0000000106600190000000db0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000012cb0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000012c30000413d000000000600004b000012cd0000613d0000000006020433000000000606004b000001500000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000012fb0000013d000000400200043d000009530420009c000000db0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000012e80000413d0000000005020433000000000505004b000001500000613d000000f8053002100000094c06000041000000000303004b0000000003050019000000000306601900000000050404330000095405500197000000000335019f0000000000340435000000400300043d000a00000003001d00000020033000390000000004010433000000000504004b000013090000613d000000000500001900000000063500190000002005500039000000000715001900000000070704330000000000760435000000000645004b000013020000413d000000000134001900000000000104350000000003020433000000000403004b000013160000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b0000130f0000413d000000000113001900000000000104350000000a030000290000000001310049000000200210008a00000000002304350000001f01100039000000200200008a000800000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000900000002001d0000094d0220009c000000db0000213d0000000101100190000000db0000c13d0000000901000029000000400010043f000009530110009c000000db0000213d00000000040b001900000044014000390000000201100367000000000101043b00000009050000290000004002500039000000400020043f0000002002500039000009570300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c000013ab0000413d0000008002100270000009550310009c000000000201a019000009550310009c0000000003000019000000100300203900000008043001bf0000094d0520009c000000000304201900000040042002700000094d0520009c000000000204201900000004043001bf000009480520009c00000000030420190000002004200270000009480520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000804000029000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b000000000400001900000001040040390000094d0530009c000000db0000213d0000000104400190000000db0000c13d000000400030043f000000020320003900000007040000290000000003340436000000210420003900000005044002720000137b0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000013730000413d000000000400004b0000137d0000613d00000007040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f000009560440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000070200002900000021022000390000000000120435000013cb0000013d0000001f0430018f00000005023002720000139b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000013940000413d000000000504004b000013a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000251e00010430000000400200043d000700000002001d000009530220009c000000db0000213d00000007030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000013b70000413d00000007030000290000000003030433000000000303004b000001500000613d000000f8031002100000094c04000041000000000101004b0000000001030019000000000104601900000000030204330000095403300197000000000113019f0000000000120435000000230100008a00000000020b00190000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000300000004001d00000000044300190000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000004410019000000000142034f000000000101043b0000094d0510009c0000083e0000213d000000000513004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000010410008c0000141a0000c13d000000000132034f000000000101043b000000010200008a0000094c03000041000000000221004b000000000200001900000000020320190000094c011001970000094c0410009c00000000030080190000094c011001670000094c0110009c000000000102001900000000010360190000006002000039000600000002001d000000000101004b0000146d0000c13d000000400100043d000600000001001d000009530110009c000000db0000213d00000006030000290000004001300039000000400010043f000000200130003900000956020000410000000000210435000000010100003900000000001304350000146d0000013d000000380210008c000014500000413d0000002002100270000009480310009c00000000030100190000000003022019000009480210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000600000004001d000009530440009c000000db0000213d000000000232019f00000006040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014380000413d00000006040000290000000004040433000000000404004b000001500000613d00000000040304330000095404400197000000f805200210000000000445019f00000958044001c700000000004304350000000302200210000000f80220008900000000012101cf0000000602000029000000210220003900000000001204350000146d0000013d000000400200043d000600000002001d000009530220009c000000db0000213d00000006030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000145c0000413d00000006030000290000000003030433000000000303004b000001500000613d000000f80110021000000000030204330000095403300197000000000113019f0000094c01100167000000000012043500000000030000310000000301000029000000000513001900000000010b0019000001e4011000390000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000200650008c0000083e0000413d000000000553004900000020034000390000094c04000041000000000653004b000000000600001900000000060420190000094c055001970000094c07300197000000000857004b0000000004008019000000000557013f0000094c0550009c000000000406c019000000000404004b0000083e0000c13d000000000232034f000000000202043b000000800320008c000014ed0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000500000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000505000029000000000445043600000021053000390000000505500272000014d80000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000014d00000413d000000000500004b000014da0000613d00000005050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000000503000029000000210330003900000000002304350000150d0000013d000000400300043d000500000003001d000009530330009c000000db0000213d00000005040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000014f90000413d00000005040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000052300190000000202000367000000000412034f000000000404043b0000094c06000041000000000754004b000000000700001900000000070680190000094c055001970000094c08400197000000000958004b0000000006008019000000000558013f0000094c0550009c00000000050700190000000005066019000000000505004b0000083e0000c13d0000000d050000290000000004540019000000000542034f000000000505043b0000094d0650009c0000083e0000213d000000400650008c0000083e0000413d000000000353004900000020054000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d0000004003400039000000000232034f000000000202043b000000800320008c0000158d0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c00000000030000190000000103002039000000000334001900000041043000390000000805000029000000000454016f000000400500043d0000000004450019000400000005001d000000000554004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000405000029000000000445043600000021053000390000000505500272000015780000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000015700000413d000000000500004b0000157a0000613d00000004050000290000000005050433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000040300002900000021033000390000000000230435000015ad0000013d000000400300043d000400000003001d000009530330009c000000db0000213d00000004040000290000004003400039000000400030043f0000000103000039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000015990000413d00000004040000290000000004040433000000000404004b000001500000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f00000000002304350000000003000031000000030200002900000000042300190000000202000367000000000112034f000000000101043b0000094c05000041000000000641004b000000000600001900000000060580190000094c044001970000094c07100197000000000847004b0000000005008019000000000447013f0000094c0440009c00000000040600190000000004056019000000000404004b0000083e0000c13d0000000d040000290000000001410019000000000412034f000000000404043b0000094d0540009c0000083e0000213d000000000343004900000020051000390000094c06000041000000000735004b000000000700001900000000070620190000094c033001970000094c05500197000000000835004b0000000006008019000000000335013f0000094c0330009c00000000030700190000000003066019000000000303004b0000083e0000c13d000000410340008c000001500000413d0000006001100039000000000112034f000000000101043b000000f801100270000100000001001d0000001b0110008a000000020110008c0000164f0000813d0000014401b00039000000000112034f000000000101043b000000000101004b000016610000613d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f00000001022001900000083e0000613d000000000201043b0000000101200210000000000302004b000015fc0000613d000000090300008a000000000331004b000000d10000213d00000000322100d9000000020220008c000000d10000c13d000000010300002900000000011300190000000802100039000000000132004b000000d10000413d000000800120008c000100000002001d000016610000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c00000000010000190000000101002039000000000313001900000041013000390000000804000029000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000000db0000213d0000000105500190000000db0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000163c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000016340000413d000000000500004b0000163e0000613d0000000005010433000000000505004b000001500000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c0000000002002019000000210310003900000000002304350000167e0000013d000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e00010430000000400100043d000009530210009c000000db0000213d0000004002100039000000400020043f0000000102000039000000000221043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000166b0000413d0000000003010433000000000303004b000001500000613d0000000105000029000000f8035002100000094c04000041000000000505004b000000000304601900000000040204330000095404400197000000000334019f000000000032043500000000020000310000000303000029000000000332001900000002080003670000000204000029000000000448034f000000000904043b0000094c04000041000000000539004b000000000500001900000000050480190000094c033001970000094c06900197000000000736004b0000000004008019000000000336013f0000094c0330009c00000000030500190000000003046019000000000303004b0000083e0000c13d0000000b0300002900000000030304330000000a0400002900000000040404330000000905000029000000000505043300000007060000290000000006060433000000060700002900000000070704330000000d0a0000290000000009a90019000000000898034f000000000808043b0000094d0a80009c0000083e0000213d000000000282004900000020099000390000094c0a000041000000000b29004b000000000b000019000000000b0a20190000094c022001970000094c09900197000000000c29004b000000000a008019000000000229013f0000094c0220009c00000000020b001900000000020a6019000000000202004b0000083e0000c13d00000000023400190000000002520019000000000262001900000000027200190000000002820019000000050300002900000000030304330000000002320019000000040300002900000000030304330000000002320019000000000301043300000000023200190000094d02200197000000380320008c000016f30000413d0000002003200270000009480420009c00000000040200190000000004032019000009480320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400500043d000009530650009c000000db0000213d000000000343019f0000004004500039000000400040043f0000000204300039000000000445043600000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b0000000000890435000000010770003a000016dd0000413d0000000006050433000000000606004b000001500000613d00000000060404330000095406600197000000f807300210000000000667019f0000095a066001c700000000006404350000000303300210000000f80330008900000000023201cf000000210350003900000000002304350000170d0000013d000000400500043d000009530350009c000000db0000213d0000004003500039000000400030043f0000000103000039000000000335043600000000040000310000000204400367000000000600001900000005076002100000000008730019000000000774034f000000000707043b0000000000780435000000010660003a000016fd0000413d0000000004050433000000000404004b000001500000613d000000f80220021000000000040304330000095404400197000000000242019f0000095902200041000000000023043500000000020000310000000303000029000000000632001900000002030003670000000204000029000000000443034f000000000404043b0000094c07000041000000000864004b000000000800001900000000080780190000094c066001970000094c09400197000000000a69004b0000000007008019000000000669013f0000094c0660009c00000000060800190000000006076019000000000606004b0000083e0000c13d0000000d060000290000000006640019000000000363034f000000000403043b0000094d0340009c0000083e0000213d000000000242004900000020066000390000094c03000041000000000726004b000000000700001900000000070320190000094c022001970000094c08600197000000000928004b0000000003008019000000000228013f0000094c0220009c00000000020700190000000002036019000000000202004b0000083e0000c13d000000400200043d00000020032000390000000007050433000000000807004b000017450000613d000000000800001900000000093800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000978004b0000173e0000413d000000000537001900000000000504350000000b070000290000000007070433000000000807004b000017540000613d0000000008000019000000000958001900000020088000390000000b0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000174c0000413d000000000557001900000000000504350000000a070000290000000007070433000000000807004b000017630000613d0000000008000019000000000958001900000020088000390000000a0a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000175b0000413d0000000005570019000000000005043500000009070000290000000007070433000000000807004b000017720000613d000000000800001900000000095800190000002008800039000000090a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b0000176a0000413d0000000005570019000000000005043500000007070000290000000007070433000000000807004b000017810000613d000000000800001900000000095800190000002008800039000000070a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017790000413d0000000005570019000000000005043500000006070000290000000007070433000000000807004b000017900000613d000000000800001900000000095800190000002008800039000000060a000029000000000aa80019000000000a0a04330000000000a90435000000000978004b000017880000413d00000000055700190000001f0740018f0000000000050435000000020660036700000005084002720000179f0000613d0000000009000019000000050a900210000000000ba50019000000000aa6034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b000017970000413d000000000907004b000017ae0000613d0000000508800210000000000686034f00000000088500190000000307700210000000000908043300000000097901cf000000000979022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000696019f0000000000680435000000000445001900000000000404350000000005010433000000000605004b000017bb0000613d000000000600001900000000074600190000002006600039000000000816001900000000080804330000000000870435000000000756004b000017b40000413d0000000001450019000000000001043500000005040000290000000004040433000000000504004b000017ca0000613d0000000005000019000000000615001900000020055000390000000507000029000000000775001900000000070704330000000000760435000000000645004b000017c20000413d0000000001140019000000000001043500000004040000290000000004040433000000000504004b000017d90000613d0000000005000019000000000615001900000020055000390000000407000029000000000775001900000000070704330000000000760435000000000645004b000017d10000413d000000000114001900000000000104350000000001210049000000200410008a00000000004204350000001f011000390000000804000029000000000441016f0000000001240019000000000441004b000000000400001900000001040040390000094d0510009c000000db0000213d0000000104400190000000db0000c13d000000400010043f0000094801000041000009480430009c000000000301801900000040033002100000000002020433000009480420009c00000000020180190000006002200210000000000232019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f00000001022001900000083e0000613d000000000101043b000012550000013d000000400210003900000972030000410000000000320435000000200210003900000013030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f000000010220019000001e300000613d000000000201043b000000800120008c000018650000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c00001e320000213d000000010550019000001e320000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000018520000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000184a0000413d000000000500004b000018540000613d0000000005010433000000000505004b00001e380000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000018820000013d000000400100043d000009530310009c00001e320000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000186f0000413d0000000004010433000000000404004b00001e380000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c000018d30000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c00001e320000213d000000010660019000001e320000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000018c00000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000018b80000413d000000000600004b000018c20000613d0000000006030433000000000606004b00001e380000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000018f00000013d000000400300043d000009530430009c00001e320000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000018dd0000413d0000000005030433000000000505004b00001e380000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000a0022000390000000202200367000000000202043b000000800420008c000019410000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c00001e320000213d000000010770019000001e320000c13d000000400060043f00000002065000390000000006640436000000210750003900000005077002720000192e0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000019260000413d000000000700004b000019300000613d0000000007040433000000000707004b00001e380000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c0000000002002019000000210540003900000000002504350000195e0000013d000000400400043d000009530540009c00001e320000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a0000194b0000413d0000000006040433000000000606004b00001e380000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f0000000000250435000000040200002900000060022000390000000202200367000000000202043b000000800520008c000019af0000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c00001e320000213d000000010880019000001e320000c13d000000400070043f00000002076000390000000007750436000000210860003900000005088002720000199c0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b000019940000413d000000000800004b0000199e0000613d0000000008050433000000000808004b00001e380000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000019cc0000013d000000400500043d000009530650009c00001e320000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000019b90000413d0000000007050433000000000707004b00001e380000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000400600043d000009530260009c00001e320000213d000000040900002900000040029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000009570800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000120029000390000000202200367000000000202043b000000800720008c00001a2d0000413d0000008007200270000009550820009c000000000702a019000009550820009c0000000008000019000000100800203900000008098001bf0000094d0a70009c000000000809201900000040097002700000094d0a70009c000000000709201900000004098001bf000009480a70009c00000000080920190000002009700270000009480a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a0040390000094d0b90009c00001e320000213d000000010aa0019000001e320000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200001a1a0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00001a120000413d000000000a00004b00001a1c0000613d000000000a070433000000000a0a004b00001e380000613d000000000a090433000009540aa00197000000f80b800210000000000aab019f000009560aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500001a4a0000013d000000400700043d000009530870009c00001e320000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00001a370000413d0000000009070433000000000909004b00001e380000613d000000f8092002100000094c0a000041000000000202004b000000000209001900000000020a601900000000090804330000095409900197000000000229019f0000000000280435000000400200043d00000020082000390000000009010433000000000a09004b00001a570000613d000000000a000019000000000b8a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b9a004b00001a500000413d000000000189001900000000000104350000000008030433000000000908004b00001a640000613d0000000009000019000000000a1900190000002009900039000000000b390019000000000b0b04330000000000ba0435000000000a89004b00001a5d0000413d000000000118001900000000000104350000000003040433000000000803004b00001a710000613d000000000800001900000000091800190000002008800039000000000a480019000000000a0a04330000000000a90435000000000938004b00001a6a0000413d000000000113001900000000000104350000000003050433000000000403004b00001a7e0000613d000000000400001900000000081400190000002004400039000000000954001900000000090904330000000000980435000000000834004b00001a770000413d000000000113001900000000000104350000000003060433000000000403004b00001a8b0000613d000000000400001900000000051400190000002004400039000000000864001900000000080804330000000000850435000000000534004b00001a840000413d000000000113001900000000000104350000000003070433000000000403004b00001a980000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b00001a910000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c00001e320000213d000000010110019000001e320000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c00001e300000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b00001e300000c13d000000010160008c00001af50000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b00001b410000c13d000009530150009c00001e320000213d0000004001500039000000400010043f00000020015000390000095603000041000000000031043500000001010000390000000000150435000000000605001900001b410000013d000000380160008c00001b270000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c00001e320000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a00001b100000413d0000000001050433000000000101004b00001e380000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf00000021035000390000000000130435000000000605001900001b410000013d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a00001b300000413d0000000001050433000000000101004b00001e380000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c00001e320000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a00001b4c0000413d0000000001050433000000000101004b00001e380000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b00001e300000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c00001e300000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b00001e300000c13d0000002001b0008c00001e300000413d000000000187034f000000000801043b000000800180008c00001bd60000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c00001e320000213d000000010cc0019000001e320000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d10027200001bc20000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b00001bba0000413d000000000100004b00001bc40000613d0000000001070433000000000101004b00001e380000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c000000000103001900000000010020190000002103700039000000000013043500001bf20000013d000000400700043d000009530170009c00001e320000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a00001be00000413d0000000001070433000000000101004b00001e380000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b00001e300000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b00001e300000c13d0000004001d0008c00001e300000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c00001c6e0000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c00001e320000213d0000000103d0019000001e320000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e10027200001c5a0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b00001c520000413d000000000100004b00001c5c0000613d0000000001080433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c000000000103001900000000010020190000002103800039000000000013043500001c8a0000013d000000400800043d000009530180009c00001e320000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a00001c780000413d0000000001080433000000000101004b00001e380000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c00001e300000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b00001e300000c13d0000004101d0008c00001e380000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c00001cc50000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c00001e3e0000c13d000000400a00043d0000095301a0009c00001e320000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a00001ccf0000413d00000000010a0433000000000101004b00001e380000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b00001e300000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c00001e300000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b00001e300000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c00001d480000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c00001e320000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a00001d320000413d00000000010b0433000000000101004b00001e380000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b00039000000000013043500001d620000013d000000400b00043d0000095301b0009c00001e320000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a00001d520000413d00000000010b0433000000000101004b00001e380000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b00001e300000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c00001e300000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b00001e300000c13d000000400300043d00000020043000390000095b01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b00001d9c0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b00001d950000413d000000000bde001900000000000b0435000000000d02043300000000010d004b00001da90000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b00001da20000413d0000000002bd00190000000000020435000000000b06043300000000010b004b00001db60000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b00001daf0000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c90027200001dc50000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b00001dbd0000413d000000000106004b00001dd40000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b00001de10000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b00001dda0000413d0000000002260019000000000002043500000000050a0433000000000105004b00001dee0000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b00001de70000413d000000000225001900000000000204350000000005070433000000000105004b00001dfb0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b00001df40000413d000000000225001900000000000204350000000005080433000000000105004b00001e080000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b00001e010000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c00001e320000213d000000010220019000001e320000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f000000010220019000001e300000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e000104300006000000000002000400000001001d0000095101000041000000000010043900000948010000410000000002000414000009480320009c0000000001024019000000c00110021000000952011001c70000800b02000039251c25120000040f0000000102200190000024f20000613d000000000201043b000000800120008c00001eac0000413d0000008001200270000009550320009c000000000102a019000009550320009c0000000003000019000000100300203900000008043001bf0000094d0510009c000000000304201900000040041002700000094d0510009c000000000104201900000004043001bf000009480510009c00000000030420190000002004100270000009480510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000094d0640009c000024f40000213d0000000105500190000024f40000c13d000000400040043f000000020430003900000000044104360000002105300039000000050550027200001e990000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b00001e910000413d000000000500004b00001e9b0000613d0000000005010433000000000505004b000024fa0000613d00000000050404330000095405500197000000f806300210000000000556019f000009560550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c00000000020020190000002103100039000000000023043500001ec90000013d000000400100043d000009530310009c000024f40000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00001eb60000413d0000000004010433000000000404004b000024fa0000613d000000f8042002100000094c05000041000000000202004b0000000002040019000000000205601900000000040304330000095404400197000000000224019f0000000000230435000000040200002900000100022000390000000202200367000000000202043b000000800320008c00001f1a0000413d0000008003200270000009550420009c000000000302a019000009550420009c0000000004000019000000100400203900000008054001bf0000094d0630009c000000000405201900000040053002700000094d0630009c000000000305201900000004054001bf000009480630009c00000000040520190000002005300270000009480630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b000000000600001900000001060040390000094d0750009c000024f40000213d0000000106600190000024f40000c13d000000400050043f000000020540003900000000055304360000002106400039000000050660027200001f070000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b00001eff0000413d000000000600004b00001f090000613d0000000006030433000000000606004b000024fa0000613d00000000060504330000095406600197000000f807400210000000000667019f000009560660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c00000000020020190000002104300039000000000024043500001f370000013d000000400300043d000009530430009c000024f40000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a00001f240000413d0000000005030433000000000505004b000024fa0000613d000000f8052002100000094c06000041000000000202004b0000000002050019000000000206601900000000050404330000095405500197000000000225019f00000000002404350000000402000029000000c0022000390000000202200367000000000202043b000000800420008c00001f880000413d0000008004200270000009550520009c000000000402a019000009550520009c0000000005000019000000100500203900000008065001bf0000094d0740009c000000000506201900000040064002700000094d0740009c000000000406201900000004065001bf000009480740009c00000000050620190000002006400270000009480740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b000000000700001900000001070040390000094d0860009c000024f40000213d0000000107700190000024f40000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200001f750000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00001f6d0000413d000000000700004b00001f770000613d0000000007040433000000000707004b000024fa0000613d00000000070604330000095407700197000000f808500210000000000778019f000009560770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500001fa50000013d000000400400043d000009530540009c000024f40000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00001f920000413d0000000006040433000000000606004b000024fa0000613d000000f8062002100000094c07000041000000000202004b0000000002060019000000000207601900000000060504330000095406600197000000000226019f00000000002504350000000402000029000000a0022000390000000202200367000000000202043b000000800520008c00001ff60000413d0000008005200270000009550620009c000000000502a019000009550620009c0000000006000019000000100600203900000008076001bf0000094d0850009c000000000607201900000040075002700000094d0850009c000000000507201900000004076001bf000009480850009c00000000060720190000002007500270000009480850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b000000000800001900000001080040390000094d0970009c000024f40000213d0000000108800190000024f40000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200001fe30000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00001fdb0000413d000000000800004b00001fe50000613d0000000008050433000000000808004b000024fa0000613d00000000080704330000095408800197000000f809600210000000000889019f000009560880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c000000000200201900000021065000390000000000260435000020130000013d000000400500043d000009530650009c000024f40000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a000020000000413d0000000007050433000000000707004b000024fa0000613d000000f8072002100000094c08000041000000000202004b0000000002070019000000000208601900000000070604330000095407700197000000000227019f0000000000260435000000040200002900000060022000390000000202200367000000000202043b000000800620008c000020640000413d0000008006200270000009550720009c000000000602a019000009550720009c0000000007000019000000100700203900000008087001bf0000094d0960009c000000000708201900000040086002700000094d0960009c000000000608201900000004087001bf000009480960009c00000000070820190000002008600270000009480960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b000000000900001900000001090040390000094d0a80009c000024f40000213d0000000109900190000024f40000c13d000000400080043f0000000208700039000000000886043600000021097000390000000509900272000020510000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b000020490000413d000000000900004b000020530000613d0000000009060433000000000909004b000024fa0000613d00000000090804330000095409900197000000f80a70021000000000099a019f000009560990004100000000009804350000000307700210000000f80770008900000000027201cf000000ff0770008c000000000200201900000021076000390000000000270435000020810000013d000000400600043d000009530760009c000024f40000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a0000206e0000413d0000000008060433000000000808004b000024fa0000613d000000f8082002100000094c09000041000000000202004b0000000002080019000000000209601900000000080704330000095408800197000000000228019f0000000000270435000000400700043d000009530270009c000024f40000213d000000040a0000290000004002a000390000000202200367000000000202043b0000004008700039000000400080043f000000200870003900000957090000410000000000980435000000150800003900000000008704350000002108700039000000600220021000000000002804350000012002a000390000000202200367000000000202043b000000800820008c000020e20000413d0000008008200270000009550920009c000000000802a019000009550920009c00000000090000190000001009002039000000080a9001bf0000094d0b80009c00000000090a2019000000400a8002700000094d0b80009c00000000080a2019000000040a9001bf000009480b80009c00000000090a2019000000200a800270000009480b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b0040390000094d0ca0009c000024f40000213d000000010bb00190000024f40000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb00272000020cf0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b000020c70000413d000000000b00004b000020d10000613d000000000b080433000000000b0b004b000024fa0000613d000000000b0a0433000009540bb00197000000f80c900210000000000bbc019f000009560bb000410000000000ba04350000000309900210000000f80990008900000000029201cf000000ff0990008c000000000200201900000021098000390000000000290435000020ff0000013d000000400800043d000009530980009c000024f40000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000020ec0000413d000000000a080433000000000a0a004b000024fa0000613d000000f80a2002100000094c0b000041000000000202004b00000000020a001900000000020b6019000000000a090433000009540aa0019700000000022a019f0000000000290435000000400200043d0000002009200039000000000a010433000000000b0a004b0000210c0000613d000000000b000019000000000c9b0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000cab004b000021050000413d00000000019a001900000000000104350000000009030433000000000a09004b000021190000613d000000000a000019000000000b1a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b9a004b000021120000413d000000000119001900000000000104350000000003040433000000000903004b000021260000613d0000000009000019000000000a1900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b0000211f0000413d000000000113001900000000000104350000000003050433000000000403004b000021330000613d000000000400001900000000091400190000002004400039000000000a540019000000000a0a04330000000000a90435000000000934004b0000212c0000413d000000000113001900000000000104350000000003060433000000000403004b000021400000613d000000000400001900000000051400190000002004400039000000000964001900000000090904330000000000950435000000000534004b000021390000413d000000000113001900000000000104350000000003070433000000000403004b0000214d0000613d000000000400001900000000051400190000002004400039000000000674001900000000060604330000000000650435000000000534004b000021460000413d000000000113001900000000000104350000000003080433000000000403004b0000215a0000613d000000000400001900000000051400190000002004400039000000000684001900000000060604330000000000650435000000000534004b000021530000413d000000000113001900000000000104350000000001210049000000200310008a00000000003204350000001f01100039000000200300008a000200000003001d000000000131016f0000000005210019000000000115004b000000000100001900000001010040390000094d0350009c000024f40000213d0000000101100190000024f40000c13d000000400050043f0000001f0100008a00000004030000290000000004310049000001c0013000390000000207000367000100000001001d000000000117034f000000000601043b000000000800003100000000014800190000094c09000041000000000a16004b000000000a000019000000000a0980190000094c011001970000094c0b600197000000000c1b004b000000000900801900000000011b013f0000094c0110009c00000000010a00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001160019000000000617034f000000000606043b0000094d0960009c000024f20000213d000000000968004900000020081000390000094c01000041000000000a98004b000000000a000019000000000a0120190000094c099001970000094c0b800197000000000c9b004b000000000100801900000000099b013f0000094c0990009c00000000010ac019000000000101004b000024f20000c13d000000010160008c000021b70000c13d000000000187034f000000000101043b000000010300008a0000094c06000041000000000331004b000000000300001900000000030620190000094c011001970000094c0710009c00000000060080190000094c011001670000094c0110009c000000000103001900000000010660190000006006000039000000000101004b000022030000c13d000009530150009c000024f40000213d0000004001500039000000400010043f000000200150003900000956030000410000000000310435000000010100003900000000001504350000000006050019000022030000013d000000380160008c000021e90000413d0000002001600270000009480360009c00000000030600190000000003012019000009480160009c0000000001000019000000040100203900000002071001bf0000ffff0830008c000000000107201900000010073002700000000003072019000000ff0330008c00000000070000190000000107002039000009530350009c000024f40000213d000000000771019f0000004001500039000000400010043f000000020170003900000000081504360000000001000031000000020910036700000000010000190000000503100210000000000a380019000000000339034f000000000303043b00000000003a0435000000010110003a000021d20000413d0000000001050433000000000101004b000024fa0000613d00000000010804330000095401100197000000f803700210000000000113019f00000958011001c700000000001804350000000301700210000000f80110008900000000011601cf000000210350003900000000001304350000000006050019000022030000013d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000000000715043600000000010000310000000208100367000000000100001900000005031002100000000009370019000000000338034f000000000303043b0000000000390435000000010110003a000021f20000413d0000000001050433000000000101004b000024fa0000613d000000f80160021000000000030704330000095403300197000000000113019f0000094c0110016700000000001704350000000006050019000000400500043d000009530150009c000024f40000213d0000004001500039000000400010043f0000000101000039000300000001001d0000000007150436000000000100003100000002081003670000000001000019000000050a100210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010110003a0000220e0000413d0000000001050433000000000101004b000024fa0000613d0000000001070433000009540110019700000959011001c70000000000170435000000000800003100000000014800190000000403000029000001e00a3000390000000207000367000000000ba7034f000000000b0b043b0000094c0c000041000000000d1b004b000000000d000019000000000d0c80190000094c011001970000094c0eb00197000000000f1e004b000000000c00801900000000011e013f0000094c0110009c00000000010d001900000000010c6019000000000101004b000024f20000c13d000000040100002900000000011b0019000000000b17034f000000000b0b043b0000094d0cb0009c000024f20000213d000000000cb8004900000020081000390000094c01000041000000000dc8004b000000000d000019000000000d0120190000094c0cc001970000094c0e800197000000000fce004b0000000001008019000000000cce013f0000094c0cc0009c00000000010dc019000000000101004b000024f20000c13d0000002001b0008c000024f20000413d000000000187034f000000000801043b000000800180008c000022980000413d0000008001800270000009550780009c000000000108a019000009550780009c00000000070000190000001007002039000000080b7001bf0000094d0c10009c00000000070b2019000000400b1002700000094d0c10009c00000000010b2019000000040b7001bf000009480c10009c00000000070b2019000000200b100270000009480c10009c00000000010b2019000000020b7001bf0000ffff0c10008c00000000070b2019000000100b10027000000000010b2019000000ff0110008c00000000010000190000000101002039000000000b1700190000004101b000390000000203000029000000000131016f000000400700043d0000000001170019000000000c71004b000000000c000019000000010c0040390000094d0d10009c000024f40000213d000000010cc00190000024f40000c13d000000400010043f0000000201b00039000000000c1704360000002101b00039000000050d100272000022840000613d0000000001000031000000020e100367000000000f0000190000000501f0021000000000031c001900000000011e034f000000000101043b0000000000130435000000010ff000390000000001df004b0000227c0000413d000000000100004b000022860000613d0000000001070433000000000101004b000024fa0000613d00000000010c04330000095401100197000000f803b00210000000000113019f000009560110004100000000001c04350000000301b00210000000f80110008900000000031801cf000000ff0110008c0000000001030019000000000100201900000021037000390000000000130435000022b40000013d000000400700043d000009530170009c000024f40000213d0000004001700039000000400010043f0000000301000029000000000b1704360000000001000031000000020c10036700000000010000190000000503100210000000000d3b001900000000033c034f000000000303043b00000000003d0435000000010110003a000022a20000413d0000000001070433000000000101004b000024fa0000613d000000f8018002100000094c03000041000000000808004b000000000103601900000000030b04330000095403300197000000000113019f00000000001b0435000000000c00003100000000014c001900000002080003670000000003a8034f000000000b03043b0000094c03000041000000000d1b004b000000000d000019000000000d0380190000094c011001970000094c0eb00197000000000f1e004b000000000300801900000000011e013f0000094c0110009c00000000010d00190000000001036019000000000101004b000024f20000c13d0000000401000029000000000b1b00190000000001b8034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003b000390000094c0c000041000000000e13004b000000000e000019000000000e0c20190000094c011001970000094c03300197000000000f13004b000000000c008019000000000113013f0000094c0110009c00000000010e001900000000010c6019000000000101004b000024f20000c13d0000004001d0008c000024f20000413d0000004001b00039000000000118034f000000000b01043b0000008001b0008c000023300000413d0000008001b002700000095503b0009c00000000010ba0190000095503b0009c0000000003000019000000100300203900000008083001bf0000094d0c10009c000000000308201900000040081002700000094d0c10009c000000000108201900000004083001bf000009480c10009c00000000030820190000002008100270000009480c10009c000000000108201900000002083001bf0000ffff0c10008c000000000308201900000010081002700000000001082019000000ff0110008c00000000010000190000000101002039000000000c1300190000004101c000390000000203000029000000000131016f000000400800043d0000000001180019000000000381004b000000000d000019000000010d0040390000094d0310009c000024f40000213d0000000103d00190000024f40000c13d000000400010043f0000000201c00039000000000d1804360000002101c00039000000050e1002720000231c0000613d0000000001000031000000020f1003670000000001000019000000050310021000000000093d001900000000033f034f000000000303043b000000000039043500000001011000390000000003e1004b000023140000413d000000000100004b0000231e0000613d0000000001080433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803c00210000000000113019f000009560110004100000000001d04350000000301c00210000000f80110008900000000031b01cf000000ff0110008c00000000010300190000000001002019000000210380003900000000001304350000234c0000013d000000400800043d000009530180009c000024f40000213d0000004001800039000000400010043f0000000301000029000000000c1804360000000001000031000000020d1003670000000001000019000000050310021000000000093c001900000000033d034f000000000303043b0000000000390435000000010110003a0000233a0000413d0000000001080433000000000101004b000024fa0000613d000000f801b002100000094c0300004100000000090b004b000000000103601900000000030c04330000095403300197000000000113019f00000000001c0435000000000c00003100000000014c0019000000020b0003670000000003ab034f000000000a03043b0000094c0300004100000000091a004b000000000900001900000000090380190000094c011001970000094c0da00197000000000e1d004b000000000300801900000000011d013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d0000000401000029000000000a1a00190000000001ab034f000000000d01043b0000094d01d0009c000024f20000213d0000000001dc00490000002003a000390000094c09000041000000000c13004b000000000c000019000000000c0920190000094c011001970000094c03300197000000000e13004b0000000009008019000000000113013f0000094c0110009c00000000010c00190000000001096019000000000101004b000024f20000c13d0000004101d0008c000024fa0000413d0000006001a0003900000000011b034f000000000b000415000000060bb0008a000000200bb000c90000094c0c000041000000000101043b000000f8011002700000001b0310008c000023870000613d000000000b000415000000050bb0008a000000200bb000c90000095b0c0000410000001c0110008c000025000000c13d000000400a00043d0000095301a0009c000024f40000213d0000004001a00039000000400010043f0000000301000029000000000d1a04360000000001000031000000020e1003670000000001000019000000050310021000000000093d001900000000033e034f000000000303043b0000000000390435000000010110003a000023910000413d00000000010a0433000000000101004b000024fa0000613d00000000010d043300000954011001970000000001c1019f00000000001d04350000002001b0011a00000000010a001f000000000b00003100000000014b0019000000020e000367000000010300002900000000033e034f000000000f03043b0000094c0300004100000000091f004b000000000900001900000000090380190000094c011001970000094c0cf00197000000000d1c004b000000000300801900000000011c013f0000094c0110009c00000000010900190000000001036019000000000101004b000024f20000c13d000000000c020433000000000d060433000000040100002900000000011f001900000000031e034f000000000e03043b0000094d03e0009c000024f20000213d0000000003eb004900000020011000390000094c09000041000000000b31004b000000000b000019000000000b0920190000094c033001970000094c01100197000000000f31004b0000000009008019000000000131013f0000094c0110009c00000000010b00190000000001096019000000000101004b000024f20000c13d0000000001cd00190000000001e1001900000000030504330000000001310019000000000307043300000000013100190000000003080433000000000131001900000000030a043300000000013100190000094d0c1001970000003801c0008c0000240a0000413d0000002001c002700000094803c0009c00000000030c001900000000030120190000094801c0009c0000000001000019000000040100203900000002091001bf0000ffff0b30008c000000000109201900000010093002700000000003092019000000ff0330008c00000000090000190000000109002039000000400b00043d0000095303b0009c000024f40000213d000000000991019f0000004001b00039000000400010043f0000000201900039000000000d1b04360000000001000031000000020e10036700000000010000190000000503100210000000000f3d001900000000033e034f000000000303043b00000000003f0435000000010110003a000023f40000413d00000000010b0433000000000101004b000024fa0000613d00000000010d04330000095401100197000000f803900210000000000113019f0000095a011001c700000000001d04350000000301900210000000f80110008900000000011c01cf0000002103b000390000000000130435000024240000013d000000400b00043d0000095301b0009c000024f40000213d0000004001b00039000000400010043f000000030100002900000000091b04360000000001000031000000020d10036700000000010000190000000503100210000000000e39001900000000033d034f000000000303043b00000000003e0435000000010110003a000024140000413d00000000010b0433000000000101004b000024fa0000613d000000f801c0021000000000030904330000095403300197000000000131019f00000959011000410000000000190435000000000c00003100000000014c001900000002040003670000000103000029000000000334034f000000000303043b0000094c09000041000000000d13004b000000000d000019000000000d0980190000094c011001970000094c0e300197000000000f1e004b000000000900801900000000011e013f0000094c0110009c00000000010d00190000000001096019000000000101004b000024f20000c13d00000004010000290000000001130019000000000314034f000000000903043b0000094d0390009c000024f20000213d00000000039c0049000000200c1000390000094c0100004100000000043c004b000000000400001900000000040120190000094c033001970000094c0dc00197000000000e3d004b000000000100801900000000033d013f0000094c0330009c000000000104c019000000000101004b000024f20000c13d000000400300043d00000020043000390000095c01000041000400000004001d0000000000140435000000210d300039000000000e0b043300000000010e004b0000245e0000613d0000000001000019000000000fd1001900000020011000390000000004b10019000000000404043300000000004f04350000000004e1004b000024570000413d000000000bde001900000000000b0435000000000d02043300000000010d004b0000246b0000613d00000000010000190000000004b100190000002001100039000000000e210019000000000e0e04330000000000e404350000000004d1004b000024640000413d0000000002bd00190000000000020435000000000b06043300000000010b004b000024780000613d000000000100001900000000042100190000002001100039000000000d610019000000000d0d04330000000000d404350000000004b1004b000024710000413d00000000022b00190000001f0690018f0000000000020435000000020bc00367000000050c900272000024870000613d00000000010000190000000504100210000000000d42001900000000044b034f000000000404043b00000000004d043500000001011000390000000004c1004b0000247f0000413d000000000106004b000024960000613d0000000501c0021000000000041b034f00000000011200190000000306600210000000000b010433000000000b6b01cf000000000b6b022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004b4019f0000000000410435000000000292001900000000000204350000000006050433000000000106004b000024a30000613d000000000100001900000000042100190000002001100039000000000951001900000000090904330000000000940435000000000461004b0000249c0000413d0000000002260019000000000002043500000000050a0433000000000105004b000024b00000613d0000000001000019000000000421001900000020011000390000000006a1001900000000060604330000000000640435000000000451004b000024a90000413d000000000225001900000000000204350000000005070433000000000105004b000024bd0000613d000000000100001900000000042100190000002001100039000000000671001900000000060604330000000000640435000000000451004b000024b60000413d000000000225001900000000000204350000000005080433000000000105004b000024ca0000613d000000000100001900000000042100190000002001100039000000000681001900000000060604330000000000640435000000000451004b000024c30000413d000000000125001900000000000104350000000001310049000000200210008a00000000002304350000001f011000390000000202000029000000000221016f0000000001320019000000000221004b000000000200001900000001020040390000094d0410009c000024f40000213d0000000102200190000024f40000c13d000000400010043f00000948010000410000000404000029000009480240009c0000000002010019000000000204401900000040022002100000000003030433000009480430009c00000000030180190000006003300210000000000223019f0000000003000414000009480430009c0000000001034019000000c001100210000000000121019f0000095c011001c70000801002000039251c25120000040f0000000102200190000024f20000613d000000000101043b000000000001042d00000000010000190000251e00010430000009700100004100000000001004350000004101000039000000040010043f00000971010000410000251e00010430000009700100004100000000001004350000003201000039000000040010043f00000971010000410000251e00010430000000400100043d00000044021000390000096b03000041000000000032043500000024021000390000000f0300003900000000003204350000094f0200004100000000002104350000000402100039000000200300003900000000003204350000094802000041000009480310009c0000000001028019000000400110021000000950011001c70000251e0001043000002515002104230000000102000039000000000001042d0000000002000019000000000001042d0000251a002104230000000102000039000000000001042d0000000002000019000000000001042d0000251c000004320000251d0001042e0000251e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ebe4a3d7000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff456e636f64696e6720756e737570706f7274656420747800000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8080000000000000000000000000000000000000000000000000000000000000496e76616c696420762076616c756500000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c6964206461746100000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000400000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000556e737570706f72746564207478207479706500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b2bf42e5ab5127f48669ab36579badd217fbd10998091dbba6028927708cf2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/ComplexUpgrader.json b/src/deps/contracts/ComplexUpgrader.json index 697d2a07..137c2845 100644 --- a/src/deps/contracts/ComplexUpgrader.json +++ b/src/deps/contracts/ComplexUpgrader.json @@ -22,8 +22,8 @@ "type": "function" } ], - "bytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b36fc6c54af58cb069c5e43b7bfc1607cf0bb46abfb0a8df94fd31e5cdd5ecd0", - "deployedBytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b36fc6c54af58cb069c5e43b7bfc1607cf0bb46abfb0a8df94fd31e5cdd5ecd0", + "bytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ae095b702686e9c828067f7814feec49aed4be7494fed7813e54a61aa5fdd3", + "deployedBytecode": "0x000400000000000200000000030100190000006003300270000000470430019700030000004103550002000000010355000000470030019d000100000000001f0000008001000039000000400010043f0000000101200190000000440000c13d0000000004000031000000040140008c0000004c0000413d0000000202000367000000000102043b00000049011001970000004a0110009c0000004c0000c13d000000040140008a0000004b03000041000000400510008c000000000500001900000000050340190000004b01100197000000000601004b000000000300a0190000004b0110009c00000000010500190000000001036019000000000101004b0000004c0000c13d0000000401200370000000000101043b0000004c0310009c0000004c0000213d0000002403200370000000000503043b0000004d0350009c0000004c0000213d00000023035000390000004b06000041000000000743004b000000000700001900000000070680190000004b084001970000004b03300197000000000983004b0000000006008019000000000383013f0000004b0330009c00000000030700190000000003066019000000000303004b0000004c0000c13d0000000403500039000000000232034f000000000302043b0000004d0230009c0000004c0000213d00000024025000390000000005230019000000000445004b0000004c0000213d0118004e0000040f0000000001000019000001190001042e0000000001000416000000000101004b0000004c0000c13d0000002001000039000001000010044300000120000004430000004801000041000001190001042e00000000010000190000011a000104300003000000000002000300000003001d000200000002001d0000000002000411000080070220008c000000dc0000c13d00000052020000410000000000200439000100000001001d000000040010044300000047010000410000000002000414000000470320009c0000000001024019000000c00110021000000053011001c700008002020000390118010e0000040f0000000102200190000000f10000613d000000400800043d000000000101043b000000000101004b0000000309000029000000f30000613d0000001f0190018f000000020200002900000002032003670000000504900272000000750000613d000000000500001900000005065002100000000007680019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b0000006d0000413d000000000501004b000000840000613d0000000504400210000000000343034f00000000044800190000000301100210000000000504043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001404350000000001980019000000000001043500000000010004140000000102000029000000040320008c0000008d0000c13d00000001030000310000000002000019000000a10000013d0000004703000041000000470490009c000000000403001900000000040940190000006004400210000000470580009c000000000503001900000000050840190000004005500210000000000545019f000000470410009c0000000001038019000000c001100210000000000151019f011801130000040f000000010220015f00030000000103550000006001100270000100470010019d00000047031001970000006001000039000000000403004b000000d30000613d000000540130009c000000d60000813d0000001f01300039000000200400008a000000000141016f0000003f01100039000000000441016f000000400100043d0000000004410019000000000514004b000000000500001900000001050040390000004d0640009c000000d60000213d0000000105500190000000d60000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000000c40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000000bc0000413d000000000705004b000000d30000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000102200190000001040000c13d000000000001042d000000550100004100000000001004350000004101000039000000040010043f00000056010000410000011a00010430000000400100043d00000064021000390000004e03000041000000000032043500000044021000390000004f030000410000000000320435000000240210003900000024030000390000000000320435000000500200004100000000002104350000000402100039000000200300003900000000003204350000004702000041000000470310009c0000000001028019000000400110021000000051011001c70000011a0001043000000000010000190000011a00010430000000440180003900000057030000410000000000310435000000240180003900000013030000390000000000310435000000500100004100000000001804350000000401800039000000200300003900000000003104350000004701000041000000470380009c0000000001084019000000400110021000000058011001c70000011a0001043000000000210104340000004703000041000000470410009c0000000001038019000000470420009c000000000203801900000040022002100000006001100210000000000121019f0000011a0001043000000111002104230000000102000039000000000001042d0000000002000019000000000001042d00000116002104250000000102000039000000000001042d0000000002000019000000000001042d0000011800000432000001190001042e0000011a00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000c987336c000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff4f5945520000000000000000000000000000000000000000000000000000000043616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000044656c65676174656520697320616e20454f410000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b3ae095b702686e9c828067f7814feec49aed4be7494fed7813e54a61aa5fdd3", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/Compressor.json b/src/deps/contracts/Compressor.json index 07f92735..aaea9846 100644 --- a/src/deps/contracts/Compressor.json +++ b/src/deps/contracts/Compressor.json @@ -62,8 +62,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c69642064617461009653619bd04c52d3ed6cde1b1628c851e936eb3bb9ece5df74fe5096b80d5991", - "deployedBytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c69642064617461009653619bd04c52d3ed6cde1b1628c851e936eb3bb9ece5df74fe5096b80d5991", + "bytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c6964206461746100b4d4241d8a2da2cf3e1bf35dd302345ffbb506f1f41300f3c5e72d9a0e037dc2", + "deployedBytecode": "0x0004000000000002000b000000000002000000000301001900000060033002700000017c04300197000300000041035500020000000103550000017c0030019d000100000000001f0000008001000039000000400010043f0000000101200190000002a80000c13d0000000005000031000000040150008c000001fe0000413d0000000203000367000000000103043b000000e0011002700000017e0210009c000002550000c13d000000040150008a0000018002000041000000800410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000701043b0000004401300370000000000201043b0000002401300370000000000101043b000600000001001d000100000002001d000001810120009c000001fe0000213d000000010100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000000000861004b0000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000001010000290000000401100039000000000113034f000000000801043b000001810180009c000001fe0000213d00000001010000290000002401100039000b00000001001d0000000001180019000000000151004b000001fe0000213d0000006401300370000000000101043b000500000001001d000001810110009c000001fe0000213d000000050100002900000023011000390000018002000041000000000451004b0000000004000019000000000402801900000180065001970000018001100197000a00000008001d000000000861004b0000000a080000290000000002008019000000000161013f000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d00000005010000290000000401100039000000000113034f000000000101043b000800000001001d000001810110009c000001fe0000213d000000050100002900000024021000390000000801000029000900000002001d0000000001210019000000000151004b000001fe0000213d0000000001000411000080080110008c000002b00000c13d0000000601000029000000090110008c000002ba0000813d000000020600003900000110147000c9000001110500008a000000000b00001900000000090000190000007d0000013d0000000001e1004b00000000090c00190000000a08000029000002330000c13d000000000107004b000000820000613d00000000217400d9000001100110008c0000022d0000c13d000000000149004b000000fc0000813d000000000159004b0000022d0000213d000001100c90003900000000018c004b000001fe0000213d0000000b01000029000000000e1900190000003c01e00039000000000113034f000000000101043b000001810110019800000000090c00190000007d0000c13d000000010900008a00000000019b004b0000022d0000613d000000090100002900000000011600190000003402e00039000000000223034f000000000113034f000000000101043b000000000202043b000000000112004b000002160000c13d000000210100008a000000000116004b0000022d0000213d00000020016000390000000802000029000000000221004b000002100000813d00000009020000290000000001210019000000000113034f000000000101043b000000fb02100270000000f801100270000000070d100190000000000a020019000000200a006039000000210160003900000000061a001a0000022d0000413d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02e00039000000000223034f0000005c0ee00039000000000ee3034f000000000113034f000000000101043b000000000f0e043b000000000e02043b0000001f02a0008c0000000302a00210000000d30000213d000001000820008900000000088901cf000700000008001d000000000920004900000000080e0019000000000e0f0019000000000f06001900000000060b0019000001000b00008a0000000009b9004b000000000b06001900000000060f0019000000000f0e0019000000000e08001900000007080000290000000008004019000000000181016f00000000080a004b000000dc0000613d000001000820008c0000022d0000213d0000000098a200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000000dd0000c13d0000000001000019000000010bb0003900000000020d004b000000790000613d0000000302d0008c000000790000613d0000000102d0008c0000000a08000029000000ea0000c13d0000000001f100190000000001e1004b00000000090c00190000007d0000613d0000023f0000013d0000000202d0008c0000024b0000c13d00000000011f00490000000001e1004b00000000090c00190000007d0000613d0000018201000041000000800010043f0000002001000039000000840010043f0000002f01000039000000a40010043f0000019101000041000000c40010043f0000019201000041000000e40010043f0000018901000041000005ee0001043000000005010000290000000601100039000000000113034f000000000101043b0000ffff0110018f00000000011b004b000001270000c13d0000000601000029000000030b1002100000010001b00089000000010200008a000700000001001d000300000002001d00000000011201cf0000000002b00049000001000900008a000200000009001d000000000292004b0000000001004019000400000001001d0000010101b0008c000001330000413d000000000107004b0000014a0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001170000613d0000015f0000013d0000018201000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000018701000041000000c40010043f0000018801000041000000e40010043f0000018901000041000005ee0001043000000000010b004b000001660000c13d000000000107004b000001e30000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b000001810220019800000000020700190000013a0000613d000001f80000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001500000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000001fe0000213d000002200000013d00050000000b001d000000000d0000190000016d0000013d0000000001c1004b000000000d0900190000000a08000029000002330000c13d000000000107004b000001720000613d00000000217400d9000001100110008c0000022d0000c13d00000000014d004b000002000000813d00000000015d004b0000022d0000213d0000011009d00039000000000189004b000001fe0000213d0000000b01000029000000000c1d00190000003c01c00039000000000113034f000000000101043b000001810e100198000000000d0900190000016d0000613d0000000601000029000000000d16001a0000022d0000413d000000080100002900000000011d004b000001fe0000213d00000009010000290000000001160019000000000113034f000000000101043b00000006020000290000001f0220008c000001930000213d0000000402000029000000000121016f0000000602000029000000000202004b000002230000613d0000000602000029000000050600002900000000622600d9000000080220008c0000022d0000c13d0000000702000029000000000121022f00000000011e004b000002230000c13d000000080100002900000000011d004b000002100000813d000000090100002900000000011d0019000000000113034f000000000101043b000000fb02100270000000f801100270000000070f100190000000000e020019000000200e0060390000000101d0003900000000061e00190000000002d6004b0000022d0000a13d0000000802000029000000000226004b000001fe0000213d000000090200002900000000012100190000007c02c00039000000000223034f0000005c08c00039000000000883034f000000000113034f000000000101043b000000000b08043b000000000c02043b0000001f02e0008c0000000302e00210000001c60000213d0000010008200089000000030a00002900000000088a01cf000000000a200049000000020d000029000000000ada004b0000000008004019000000000181016f00000000080e004b000001cf0000613d000001000820008c0000022d0000213d00000000a8e200d9000000080880008c0000022d0000c13d0000010008200089000000000181022f000000000202004b000001d00000c13d000000000100001900000000020f004b000001690000613d0000000302f0008c000001690000613d0000000102f0008c0000000a08000029000001dc0000c13d0000000001b100190000000001c1004b000000000d0900190000016d0000613d0000023f0000013d0000000202f0008c0000024b0000c13d00000000011b00490000000001c1004b000000000d0900190000016d0000613d000000f00000013d00000000217400d9000001100110008c0000022d0000c13d000000010100002900000060011000390000000002000019000000000742004b000002000000813d000000000752004b0000022d0000213d00000110072000390000000a08000029000000000887004b0000000a08000029000001fe0000213d0000000002210019000000000223034f000000000202043b00000181022001980000000002070019000001e90000613d0000000601000029000000000116001a0000022d0000413d0000000802000029000000000121004b000002200000a13d0000000001000019000005ee000104300000000801000029000000000116004b0000000001000019000000010100603905ec05190000040f0000000b010000290000000a0200002905ec05310000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000018c0100004100000000001004350000003201000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001801000039000000a40010043f0000018b01000041000000c40010043f0000018401000041000005ee000104300000000601000029000000000101004b0000022d0000c13d0000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000018a01000041000000c40010043f0000018401000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000018e01000041000000c40010043f0000018f01000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002e01000039000000a40010043f0000019301000041000000c40010043f0000019401000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000019001000041000000c40010043f0000018401000041000005ee000104300000017f0110009c000001fe0000c13d000000040150008a0000018002000041000000400410008c000000000400001900000000040240190000018001100197000000000601004b000000000200a019000001800110009c00000000010400190000000001026019000000000101004b000001fe0000c13d0000000401300370000000000101043b000001810210009c000001fe0000213d00000023021000390000018004000041000000000652004b0000000006000019000000000604801900000180075001970000018002200197000000000872004b0000000004008019000000000272013f000001800220009c00000000020600190000000002046019000000000202004b000001fe0000c13d0000000402100039000000000223034f000000000202043b000001810420009c000001fe0000213d00000024011000390000000004120019000000000454004b000001fe0000213d0000002404300370000000000604043b000001810460009c000001fe0000213d00000023046000390000018007000041000000000854004b0000000008000019000000000807801900000180095001970000018004400197000000000a94004b0000000007008019000000000494013f000001800440009c00000000040800190000000004076019000000000404004b000001fe0000c13d0000000404600039000000000343034f000000000403043b000001810340009c000001fe0000213d00000024036000390000000006340019000000000556004b000001fe0000213d0000000005000411000080010550008c000002c60000c13d05ec02d00000040f000000400200043d00000000001204350000017c010000410000017c0320009c0000000001024019000000400110021000000185011001c7000005ed0001042e0000000001000416000000000101004b000001fe0000c13d0000002001000039000001000010044300000120000004430000017d01000041000005ed0001042e0000018201000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f0000018601000041000000c40010043f0000018401000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000019501000041000000c40010043f0000019601000041000000e40010043f0000018901000041000005ee000104300000018201000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000018301000041000000c40010043f0000018401000041000005ee0001043000030000000000020000001e0530008a000000020d00036700000000065d034f000000000606043b0000000306600210000001970c6001970000000206c001bf000000000746004b000004320000213d000000000b6400490000000207b00210000000000727004b000004400000c13d000000000746004b000002f80000613d0000000005650019000000160630008a000000180710008a0000000008000019000000000985001900000000099d034f000000000909043b00000003099002100000019709900197000000000ac9004b000004080000813d0000000009960019000000020a800210000000000aa70019000000000aad034f00000000099d034f000000000909043b000000000a0a043b0000000009a9013f00000181099001980000041d0000c13d00000002088000390000000009b8004b000002e40000413d0000001f05200190000004580000c13d000001a30520009c0000046a0000813d00000020052001900000047c0000613d00000000080004140000000007120019000000000527004b000000000500001900000001050040390000017c0610019700000001015001900000043a0000c13d0000000001000031000000000571004b0000043a0000413d000100000002001d000300000003001d000200000004001d0000000204600367000001a40580009c0000048e0000813d00000000017100490000017c0110019700000000011403df000000c002800210000001a502200197000001a6022001c700000000012103af000000020200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000004a00000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c0000000209000029000000030a000029000004340000213d0000000104400190000004340000c13d000000400020043f00000000023104360000001f043000390000000504400272000000010b0000290000033d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000003350000413d000000000400004b0000033f0000613d0000000104000031000000000443004b000004320000213d00000003050003670000001f0430018f00000005033002720000034f0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000003470000413d000000000604004b0000035e0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000004bb0000c13d0000000001020433000000400800043d000001a902000041000000000028043500000004028000390000002003000039000000000032043500000024028000390000000000920435000001aa01100197000000db02b00210000001ab02200197000000000412019f0000001f0290018f00000044018000390000000203a00367000001ac044001c7000300000004001d00000005049002720000037e0000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000003760000413d000000000502004b0000038d0000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000000191001900000000000104350000001f01900039000000200200008a000000000121016f0000017c020000410000017c0380009c00000000030200190000000003084019000000400330021000000044011000390000017c0410009c00000000010280190000006001100210000000000131019f00000000030004140000017c0430009c0000000002034019000000c002200210000000000112019f0000800802000039000200000008001d05ec05dd0000040f000000020a000029000000000301001900000060033002700000017c03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003af0000413d000000000705004b000003c60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004cd0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001810410009c000004340000213d0000000102200190000004340000c13d000000400010043f000000200130008c000004320000413d000001ad010000410000000000100439000080040100003900000004001004430000017c0100004100000000020004140000017c0320009c0000000001024019000000c001100210000001ae011001c7000080020200003905ec05e20000040f0000000102200190000004320000613d000000000101043b000000000101004b000004320000613d000000400400043d000001af0100004100000000001404350000000401400039000000030200002900000000002104350000017c0100004100000000020004140000017c0320009c00000000020180190000017c0340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f0000018d011001c7000080040200003905ec05dd0000040f000000000301001900000060033002700001017c0030019d0000017c0430019700030000000103550000000102200190000004f30000613d0000000202000029000001810120009c000004340000213d000000400020043f0000000301000029000000000001042d000000400100043d00000064021000390000019c03000041000000000032043500000044021000390000019d030000410000000000320435000000240210003900000024030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee00010430000000400100043d00000064021000390000019f0300004100000000003204350000004402100039000001a0030000410000000000320435000000240210003900000032030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee000104300000000001000019000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d00000084021000390000019803000041000000000032043500000064021000390000019903000041000000000032043500000044021000390000019a030000410000000000320435000000240210003900000048030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019b011001c7000005ee00010430000000400100043d0000004402100039000001a1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b2030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b1030000410000000000320435000000240210003900000002030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000004ab0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000004a40000413d000000000504004b000004b90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee00010430000000400100043d0000004402100039000001a8030000410000000000320435000000240210003900000019030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000000400200043d0000001f0430018f0000000503300272000004da0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004d20000413d000000000504004b000004e90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000400200043d0000001f0340018f0000000504400272000005000000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000004f80000413d000000000503004b0000050f0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000017c0100004100000001030000310000017c0430009c00000000030180190000017c0420009c000000000102401900000040011002100000006002300210000000000112019f000005ee00010430000000000101004b0000051c0000613d000000000001042d000000400100043d0000006402100039000001b30300004100000000003204350000004402100039000001b4030000410000000000320435000000240210003900000023030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c000000000102801900000040011002100000019e011001c7000005ee0001043000000000030004140000000004120019000000000224004b000000000500001900000001050040390000017c021001970000000101500190000005900000c13d0000000001000031000000000541004b000005900000413d0000000202200367000001a40530009c000005960000813d00000000014100490000017c0110019700000000011203df000000c002300210000001a502200197000001a6022001c700000000012103af000080100200003905ec05e70000040f000000000301001900000060033002700001017c0030019d0000017c0330019700030000000103550000000102200190000005a80000613d0000003f01300039000001a702100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000001810520009c000005c30000213d0000000104400190000005c30000c13d000000400020043f00000000023104360000001f0430003900000005044002720000056a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005620000413d000000000400004b0000056c0000613d0000000104000031000000000443004b000005c90000213d00000003050003670000001f0430018f00000005033002720000057c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000005740000413d000000000604004b0000058b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cb0000c13d0000000001020433000000000001042d0000018c0100004100000000001004350000001101000039000000040010043f0000018d01000041000005ee00010430000000400100043d0000004402100039000001b0030000410000000000320435000000240210003900000008030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee000104300000001f0430018f0000000502300272000005b30000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005ac0000413d000000000504004b000005c10000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000005ee000104300000018c0100004100000000001004350000004101000039000000040010043f0000018d01000041000005ee000104300000000001000019000005ee00010430000000400100043d0000004402100039000001b503000041000000000032043500000024021000390000001f030000390000000000320435000001820200004100000000002104350000000402100039000000200300003900000000003204350000017c020000410000017c0310009c00000000010280190000004001100210000001a2011001c7000005ee00010430000005e0002104210000000102000039000000000001042d0000000002000019000000000001042d000005e5002104230000000102000039000000000001042d0000000002000019000000000001042d000005ea002104230000000102000039000000000001042d0000000002000019000000000001042d000005ec00000432000005ed0001042e000005ee00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006006d8b500000000000000000000000000000000000000000000000000000000f5e69a478000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e617070726f7072696174652063616c6c6572000000000000000000000000496e636f7272656374206e756d626572206f6620696e697469616c2073746f726167652064696666730000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000072773a20656e756d206b6579206d69736d61746368000000000000000000000069773a20696e697469616c206b6579206d69736d6174636800000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007472616e73666f726d206f72206e6f20636f6d7072657373696f6e3a20636f6d7072657373656420616e642066696e616c206d69736d61746368000000000000756e737570706f72746564206f7065726174696f6e00000000000000000000007375623a20696e697469616c206d696e757320636f6e766572746564206e6f7420657175616c20746f2066696e616c00000000000000000000000000000000006164643a20696e697469616c20706c757320636f6e766572746564206e6f7420657175616c20746f2066696e616c000000000000000000000000000000000000656e756d65726174696f6e20696e6465782073697a6520697320746f6f206c617267650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fff862797465636f646500000000000000000000000000000000000000000000000074696d65732073686f72746572207468616e20746865206f726967696e616c20456e636f6465642064617461206c656e6774682073686f756c6420626520342000000000000000000000000000000000000000a4000000000000000000000000756e647300000000000000000000000000000000000000000000000000000000456e636f646564206368756e6b20696e646578206973206f7574206f6620626f0000000000000000000000000000000000000084000000000000000000000000206f726967696e616c2062797465636f64650000000000000000000000000000456e636f646564206368756e6b20646f6573206e6f74206d6174636820746865706f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe07368612072657475726e656420696e76616c696420646174610000000000000062f84b240000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffff0000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000066667300000000000000000000000000000000000000000000000000000000004578747261206461746120696e205f636f6d70726573736564537461746544696b656363616b3235362072657475726e656420696e76616c6964206461746100b4d4241d8a2da2cf3e1bf35dd302345ffbb506f1f41300f3c5e72d9a0e037dc2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/ContractDeployer.json b/src/deps/contracts/ContractDeployer.json index 444ab0c6..fa7be3ad 100644 --- a/src/deps/contracts/ContractDeployer.json +++ b/src/deps/contracts/ContractDeployer.json @@ -211,6 +211,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_keccak256BytecodeHash", + "type": "bytes32" + } + ], + "name": "forceDeployKeccak256", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { @@ -412,8 +425,8 @@ "type": "function" } ], - "bytecode": "0x00050000000000020009000000000002000000000301001900000060033002700000055d04300197000400000041035500030000000103550000055d0030019d000200000002001f000100000000001f0000008001000039000000400010043f0000000101200190000000630000c13d0000000002000031000000040120008c0000040f0000413d0000000301000367000000000301043b000000e0033002700000055f0430009c0000006b0000213d000005670430009c000000ab0000213d0000056b0430009c000001620000613d0000056c0430009c000002ca0000613d0000056d0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000003b0000c13d000005910120009c000002b50000813d000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d00000000003104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d020000390000000203000039000005a8040000410000000805000029156f155a0000040f00000001012001900000040f0000613d000000a90000013d0000000001000416000000000101004b0000040f0000c13d0000002001000039000001000010044300000120000004430000055e01000041000015700001042e000005600430009c0000000004000410000900000004001d000000e30000213d000005640430009c000001840000613d000005650430009c000003540000613d000005660330009c0000040f0000c13d000000040320008a0000056e04000041000000200530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000e04043b0000056f04e0009c0000040f0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000040f0000213d000000090500008a0000000004000411000000000554016f000080070550008c000004e80000c13d00000000050e004b0000051c0000c13d0000000001000416000000000101004b000006b70000c13d0000000001000019000015700001042e000005680430009c000002080000613d000005690130009c000003e30000613d0000056a0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d0000000002000031000000040120008a0000056e03000041000000800410008c000000000400001900000000040340190000056e01100197000000000501004b000000000300a0190000056e0110009c00000000010400190000000001036019000000000101004b0000040f0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005700330009c0000040f0000213d0000006401100370000000000101043b0000056f0310009c0000040f0000213d0000000401100039156f0ae20000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019156f0afd0000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000005610430009c000002980000613d000005620430009c000004020000613d000005630330009c0000040f0000c13d000000040320008a0000056e04000041000000400530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b000800000003001d0000056f0330009c0000040f0000213d00000008030000290000000002320049000700000002001d000000040220008a0000056e03000041000000a00420008c000000000400001900000000040340190000056e02200197000000000502004b000000000300a0190000056e0220009c00000000020400190000000002036019000000000202004b0000040f0000c13d0000002402100370000000000202043b000600000002001d000005700220009c0000040f0000213d00000000020004110000000903000029000000000232004b000004de0000c13d00000008020000290000000402200039000000000121034f000000000201043b0000057401000041000000800010043f000500000002001d000000840020043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800402000039156f155f0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001360000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000012e0000413d000000000705004b000001450000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004f60000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200230008c0000040f0000413d000000800200043d000000000202004b0000071b0000c13d00000571020000410000000404000029000000000024043500000084021001bf00000020030000390000000000320435000000c40210003900000590030000410000000000320435000000a4011000390000001a02000039000000000021043500000040014002100000057b011001c700001571000104300000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000400310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000003020003670000000401200370000000000101043b000005700310009c0000040f0000213d0000002402200370000000000202043b156f0bd80000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000800000001001d0000056f0110009c0000040f0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000001bb0000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000600000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001dc0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001d40000413d000000000705004b000001eb0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000061f0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000601000029156f0bd80000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029156f0c040000040f00000006010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000700000004001d0000056f0440009c0000040f0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000002470000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000400000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000002680000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002600000413d000000000705004b000002770000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cf0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029156f10ac0000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000044e0000c13d0000ffff0120008c0000044e0000a13d000000400100043d0000006402100039000005a90300004100000000003204350000004402100039000005aa030000410000000000320435000000240210003900000024030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000700000001001d0000056f0110009c0000040f0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000003040000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000031d0000413d000000000705004b000003340000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006450000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029156f0c040000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005700110009c0000040f0000213d00000009010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007450000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007450000213d00000000001304350000000001020433000000010210008c000007450000213d0000000102000039000000400400043d000000000101004b000003dc0000c13d000005a50100004100000000001404350000000401400039000000090200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000900000004001d156f155f0000040f000000090a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b40000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ac0000413d000000000705004b000003c40000613d0000000506600210000000000761034f000000090800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007630000613d0000001f01400039000000600210018f00000009010000290000000001120019000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000200230008c0000040f0000413d00000009020000290000000002020433000000000202004b00000000020000190000000102006039000000000401001900000000002404350000055d010000410000055d0240009c0000000001044019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000005700210009c0000040f0000213d000000400200043d000005a60320009c000004ae0000413d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b000004110000613d000000000100001900001571000104300000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000800000004001d0000056f0440009c0000040f0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000004400000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b0000066b0000c13d0000057101000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005aa01000041000000c40010043f000005a901000041000000e40010043f000005ab010000410000157100010430000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400400043d000005870240009c000003fc0000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007450000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007450000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c0000074b0000c13d000000000101004b0000074b0000c13d00000001020000390000000701000029000900000002001d0000000000210435000000080100002900000570011001970000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007450000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d000000090200002900000000002104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d02000039000000020300003900000599040000410000000805000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007450000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007450000213d00000000003104350000000003020433000000010230008c000007450000213d000000400200043d00000000033204360000000001010433000000010410008c000007450000213d00000000001304350000055d010000410000055d0320009c00000000010240190000004001100210000005a7011001c7000015700001042e0000057101000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000057201000041000000c40010043f000005730100004100001571000104300000057101000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f0000059a01000041000000c40010043f0000059b01000041000000e40010043f0000059c01000041000001040010043f0000059d010000410000157100010430000000400200043d0000001f0430018f0000000503300272000005030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004fb0000413d000000000504004b000005120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b0000056e09000041000000000a58004b000000000a000019000000000a0980190000056e0b5001970000056e0c800197000000000dbc004b0000000009008019000000000bbc013f0000056e0bb0009c00000000090ac019000000000909004b0000040f0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000008810000c13d00000001077000390000000008e7004b000005210000413d0000000001000416000000000161004b000006b70000c13d000000c30100008a0000000001310049000200000001001d0000057001400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b000000020300002900000000033000310000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000002f20019000700000002001d0000006002200039000600000002001d000000000121034f000000000101043b000300000001001d00000578010000410000000000100439000000090100002900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000800000009001d156f155f0000040f000000070b0000290000000809000029000000040f000029000000050e00002900000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400a00043d0000059e0100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005700210009c0000040f0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000008402a00039000000000012043500000006010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b0000056e05000041000000000643004b000000000600001900000000060580190000056e044001970000056e07300197000000000847004b0000000005008019000000000447013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000003b30019000000000131034f000000000101043b0000056f0410009c0000040f0000213d000000200330003900000000021200490000056e04000041000000000523004b000000000500001900000000050420190000056e022001970000056e06300197000000000726004b0000000004008019000000000226013f0000056e0220009c00000000020500190000000002046019000000000202004b0000040f0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000005d70000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000005cf0000413d0000001f05100190000005e60000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000903000029000000040330008c000006180000613d0000001f01100039000000200300008a000000000131016f0000059f030000410000059f0410009c00000000010380190000055d030000410000055d04a0009c00070000000a001d000000000403001900000000040a401900000040044002100000006001100210000000000141019f0000055d0420009c0000000002038019000000c002200210000000000121019f000005a0011000410000000303000029000000000203004b0000060b0000613d0000058e011001c7000080090200003900000009040000290000000005000019156f155a0000040f0000060d0000013d0000000902000029156f155a0000040f0004000000010355000000000301001900000060033002700001055d0030019d0000055d043001970000000102200190000000050e000029000000040f0000290000000809000029000000070a000029000008140000613d0000056f01a0009c000003fc0000213d0000004000a0043f00000001099000390000000001e9004b000005490000413d000000a90000013d000000400200043d0000001f0430018f00000005033002720000062c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006240000413d000000000504004b0000063b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000006520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000064a0000413d000000000504004b000006610000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000068a0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006820000413d000000000705004b000006990000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006f50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000501000029156f0bd80000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029156f10ac0000040f00000005010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000400100043d0000008402100039000005a20300004100000000003204350000006402100039000005a30300004100000000003204350000004402100039000005a4030000410000000000320435000000240210003900000045030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000006dc0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d40000413d000000000504004b000006eb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000007020000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006fa0000413d000000000504004b000007110000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000c002100039000000400020043f00000004020000290000000000020435000000a001100039000200000001001d000000000001043500000008010000290000002401100039000100000001001d0000000301100367000000000101043b000300000001001d000005700110009c0000040f0000213d00000003010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000004020000290000000002020433000000010320008c000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000002020000290000000002020433000000010320008c000007890000a13d000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000000400100043d000000840210003900000594030000410000000000320435000000640210003900000595030000410000000000320435000000440210003900000596030000410000000000320435000000240210003900000043030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000007700000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007680000413d000000000504004b0000077f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000080100002900000084021000390000000301000367000000000221034f000000000202043b0000000703000029000000230330008a0000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d000000080300002900000000023200190000000403200039000000000331034f000000000303043b000700000003001d0000056f0330009c0000040f0000213d0000000703000029000000000330007900000024052000390000056e02000041000000000435004b000000000400001900000000040220190000056e03300197000400000005001d0000056e05500197000000000635004b0000000002008019000000000335013f0000056e0330009c000000000204c019000000000202004b0000040f0000c13d00000008020000290000004402200039000000000121034f000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000000002000416000800000002001d000000000101004b0000083a0000c13d0000000801000029000000000101004b000008870000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000002401400039000000050200002900000000002104350000058d0100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008fa0000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f00000001010000290000000301100367000000000701043b000005700170009c0000040f0000213d0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f0400004100000006050000290000000506000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d000000400200043d0000001f0340018f0000000504400272000008210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008190000413d000000000503004b000008300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000801000029000000000101004b0000089c0000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057c01000041000000000014043500000004014000390000000302000029000000000021043500000005010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039000200000002001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008d40000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000000801000029000000000101004b000008780000613d000000000100041600000580011001970000000000010417000000000100041400000007020000290000000403000029000000000232001a0000055d04300197000008810000413d0000000003000031000000000523004b000009460000813d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d00000064021000390000058a03000041000000000032043500000044021000390000058b030000410000000000320435000000240210003900000038030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000005780100004100000000001004390000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000302000029000000000021043500000009010000290000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000009200000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000083d0000013d000000400200043d0000001f0340018f0000000504400272000008e10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008d90000413d000000000503004b000008f00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000009070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008ff0000413d000000000503004b000009160000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000092d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000009250000413d000000000503004b0000093c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000304400367000005810510009c0000095b0000413d000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c7000015710001043000000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af0000000302000029000000060d000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000a7b0000613d0000003f013000390000058401100197000000400200043d0000000001120019000700000002001d000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000070100002900000000073104360000001f013000390000000501100272000009890000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000009810000413d000900000007001d000000000100004b0000098c0000613d0000000101000031000000000113004b0000040f0000213d00000004020003670000001f0130018f00000005033002720000099d0000613d0000000004000019000000050540021000000009060000290000000006560019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000009940000413d000000000401004b000009ad0000613d0000000503300210000000000232034f000000090400002900000000033400190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000020200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d000005850100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000a960000613d00000008010000290000056f0110009c000003fc0000213d0000000801000029000000400010043f000000070100002900000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000040f0000c13d000000090200002900000000020204330000056f0320009c0000040f0000213d0000000903000029000000000131001900000000023200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d00000000230204340000056f0430009c000003fc0000213d00000005043002100000003f04400039000000200500008a000000000454016f000000080500002900000000045400190000056f0540009c000003fc0000213d000000400040043f0000000804000029000000000034043500000006033002100000000003230019000000000413004b0000040f0000213d000000000432004b00000a2f0000813d000000080400002900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b0000040f0000c13d000000400500043d000005870650009c000003fc0000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000a140000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400300043d000000240130003900000040020000390000000000210435000005880100004100000000001304350000000401300039000000030200002900000000002104350000000801000029000000000101043300000044023000390000000000120435000900000003001d0000006402300039000000000301004b00000a5e0000613d000000000300001900000008040000290000002004400039000800000004001d0000000004040433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000a520000413d000000090400002900000000014200490000055d020000410000055d0340009c0000000003020019000000000304401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000abc0000613d00000009010000290000056f0110009c000003fc0000213d000007fe0000013d0000001f0430018f000000050230027200000a860000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a7f0000413d000000000504004b00000a940000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000aa30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000a9b0000413d000000000503004b00000ab20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f000000050440027200000ac90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ac10000413d000000000503004b00000ad80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000001f031000390000056e04000041000000000523004b000000000500001900000000050440190000056e062001970000056e03300197000000000763004b000000000400a019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000afb0000613d0000000303100367000000000303043b0000056f0430009c00000afb0000213d00000020011000390000000004310019000000000224004b00000afb0000213d0000000002030019000000000001042d00000000010000190000157100010430000300000000000200000000070004140000000008450019000000000558004b000000000500001900000001050040390000055d04400197000000010550019000000b8b0000c13d0000000006000031000000000586004b00000b8b0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005810570009c00000b990000813d00000000028600490000055d0220019700000000022403df000000c0017002100000058201100197000005ac011001c700000000011203af0000801002000039156f15640000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000bab0000613d0000003f013000390000058402100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000056f0520009c00000b910000213d000000010440019000000b910000c13d000000400020043f00000000023104360000001f04300039000000050440027200000b3a0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000b320000413d000000000400004b00000b3c0000613d0000000104000031000000000443004b00000b970000213d00000004050003670000001f0430018f000000050330027200000b4c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000b440000413d000000000604004b00000b5b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c0000000304000029000000020500002900000bc60000c13d0000000002020433000000400100043d000000a0031000390000000000230435000000800210003900000000005204350000006002100039000000010300002900000000003204350000057002400197000000400310003900000000002304350000002002100039000005ae030000410000000000320435000000a0030000390000000000310435000005af0310009c00000b910000213d000000c003100039000000400030043f0000055d030000410000055d0420009c0000000002038019000000400220021000000000010104330000055d0410009c00000000010380190000006001100210000000000121019f00000000020004140000055d0420009c0000000002038019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000b970000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000004101000039000000040010043f0000058601000041000015710001043000000000010000190000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000bb60000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000baf0000413d000000000504004b00000bc40000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400100043d0000004402100039000005ad03000041000000000032043500000024021000390000001f030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c70000157100010430000000400300043d0000006004300039000000000024043500000570011001970000004002300039000000000012043500000060010000390000000001130436000005b0020000410000000000210435000005b10230009c00000bfc0000813d0000008002300039000000400020043f0000055d020000410000055d0410009c0000000001028019000000400110021000000000030304330000055d0430009c00000000030280190000006003300210000000000113019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000c020000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000000100001900001571000104300008000000000002000700000001001d000000000101004b00000ef70000613d000300000004001d000400000003001d000000400400043d000200000002001d00000570022001970000ffff0120008c00000f090000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c350000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c2d0000413d000000000705004b00000c440000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f1d0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c00000ee50000213d000000010110019000000ee50000c13d000000400040043f0000001f0130008c00000ee30000a13d00000000010a0433000000000101004b000000040140003900000f430000c13d000005b4020000410000000000240435000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c7d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c750000413d000000000705004b00000c8c0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f530000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000f790000c13d000005740100004100000000001404350000000401400039000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000cc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000cb80000413d000000000705004b00000ccf0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f8a0000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000fb00000613d000005870140009c00000ee50000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f0000000503000029000000010220019000000ee30000613d000000000101043b0000000002030433000000020320008c00000eeb0000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000eeb0000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b00000d790000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000103a0000613d00000001020000290000056f0120009c00000ee50000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010600000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f00000000010004160000058001100197000000000001041700000daa0000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010860000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d04400197000000010330019000000ef10000c13d0000000003000031000000000523004b00000ef10000413d0000000304400367000005810510009c00000fc10000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000202000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000fd30000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c00000ee50000213d000000010220019000000ee50000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000de90000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000de10000413d000000000100004b00000deb0000613d0000000101000031000000000113004b00000ee30000213d00000004020003670000001f0130018f000000050330027200000dfb0000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000df30000413d000000000401004b00000e0a0000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000fee0000613d00000006090000290000056f0190009c000000050100002900000ee50000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b000000040400002900000ee30000c13d00000000020404330000056f0320009c00000ee30000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000ee30000c13d00000000230204340000056f0430009c00000ee50000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c00000ee50000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000ee30000213d000000000432004b00000e890000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b00000ee30000c13d000000400500043d000005870650009c00000ee50000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000e6e0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f0000000606000029000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000eb50000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000eab0000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010140000613d00000006020000290000056f0120009c000000000102001900000ee50000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f000000010120019000000ee30000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f2a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f220000413d000000000504004b00000f390000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b303000041000000000032043500000024024000390000001503000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f600000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f580000413d000000000504004b00000f6f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b5020000410000000000210435000000240140003900000013020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f8f0000413d000000000504004b00000fa60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000fde0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000fd70000413d000000000504004b00000fec0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000ffb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ff30000413d000000000503004b0000100a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010190000413d000000000503004b000010300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010470000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000103f0000413d000000000503004b000010560000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000106d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010650000413d000000000503004b0000107c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010930000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000108b0000413d000000000503004b000010a20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300008000000000002000300000005001d000700000001001d000000000101004b000013a50000613d000400000003001d000200000004001d000000400400043d000100000002001d00000570022001970000ffff0120008c000013b70000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000010de0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010d60000413d000000000705004b000010ed0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000013cb0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c000013930000213d0000000101100190000013930000c13d000000400040043f0000001f0130008c000013910000a13d00000000010a0433000000000101004b000013f10000c13d000005b40100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011260000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111e0000413d000000000705004b000011350000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014020000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000000401400039000014280000c13d00000574020000410000000000240435000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000011610000413d000000000705004b000011780000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014380000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000145e0000613d000005870140009c000013930000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000013990000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f00000005030000290000000102200190000013910000613d000000000101043b0000000002030433000000010320008c0000000405000029000013990000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000013990000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b000012270000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014e80000613d00000004020000290000056f0120009c000013930000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000150e0000613d00000005020000290000056f0120009c000013930000213d000000400020043f000000000100041600000580011001970000000000010417000012580000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000015340000613d00000005020000290000056f0120009c000013930000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d0440019700000001033001900000139f0000c13d0000000003000031000000000523004b0000139f0000413d0000000304400367000005810510009c0000146f0000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000102000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d0330019700040000000103550000000102200190000014810000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c000013930000213d0000000102200190000013930000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000012970000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000128f0000413d000000000100004b000012990000613d0000000101000031000000000113004b000013910000213d00000004020003670000001f0130018f0000000503300272000012a90000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000012a10000413d000000000401004b000012b80000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000149c0000613d00000006090000290000056f0190009c0000000501000029000013930000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000000404000029000013910000c13d00000000020404330000056f0320009c000013910000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b000013910000c13d00000000230204340000056f0430009c000013930000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c000013930000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000013910000213d000000000432004b000013370000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b000013910000c13d000000400500043d000005870650009c000013930000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000131c0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000006060000290000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000013630000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000013590000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014c20000613d00000006020000290000056f0120009c0000000001020019000013930000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f0000000101200190000013910000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000013d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d00000413d000000000504004b000013e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b3020000410000000000210435000000240140003900000015020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f00000005033002720000140f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014070000413d000000000504004b0000141e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b503000041000000000032043500000024024000390000001303000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000014450000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000143d0000413d000000000504004b000014540000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f00000005023002720000148c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014850000413d000000000504004b0000149a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f0000000504400272000014a90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014a10000413d000000000503004b000014b80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014cf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014c70000413d000000000503004b000014de0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014ed0000413d000000000503004b000015040000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000151b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015130000413d000000000503004b0000152a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000015410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015390000413d000000000503004b000015500000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000155d002104210000000102000039000000000001042d0000000002000019000000000001042d00001562002104230000000102000039000000000001042d0000000002000019000000000001042d00001567002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000156d002104290000000102000039000000000001042d0000000002000019000000000001042d0000156f00000432000015700001042e00001571000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000ec8067c600000000000000000000000000000000000000000000000000000000ec8067c700000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb6000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000e9f18c17000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000579952fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0c2e4ff97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbfad7e232e000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e554686520636f64652068617368206973206e6f74206b6e6f776e0000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb00000000000000000000000000000000000001040000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f4de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c20000000000000000000000000000000000000008400000080000000000000000000000001000000000000000000000000000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f63bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f0000000000000000000000000000000000000000000000000000000000000000000000000034a847ba485cad38c9fa78abfe24fa6106d1853962dad77d41720e1a6e146113", - "deployedBytecode": "0x00050000000000020009000000000002000000000301001900000060033002700000055d04300197000400000041035500030000000103550000055d0030019d000200000002001f000100000000001f0000008001000039000000400010043f0000000101200190000000630000c13d0000000002000031000000040120008c0000040f0000413d0000000301000367000000000301043b000000e0033002700000055f0430009c0000006b0000213d000005670430009c000000ab0000213d0000056b0430009c000001620000613d0000056c0430009c000002ca0000613d0000056d0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000003b0000c13d000005910120009c000002b50000813d000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d00000000003104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d020000390000000203000039000005a8040000410000000805000029156f155a0000040f00000001012001900000040f0000613d000000a90000013d0000000001000416000000000101004b0000040f0000c13d0000002001000039000001000010044300000120000004430000055e01000041000015700001042e000005600430009c0000000004000410000900000004001d000000e30000213d000005640430009c000001840000613d000005650430009c000003540000613d000005660330009c0000040f0000c13d000000040320008a0000056e04000041000000200530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000e04043b0000056f04e0009c0000040f0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000040f0000213d000000090500008a0000000004000411000000000554016f000080070550008c000004e80000c13d00000000050e004b0000051c0000c13d0000000001000416000000000101004b000006b70000c13d0000000001000019000015700001042e000005680430009c000002080000613d000005690130009c000003e30000613d0000056a0130009c0000040f0000c13d0000000001000416000000000101004b0000040f0000c13d0000000002000031000000040120008a0000056e03000041000000800410008c000000000400001900000000040340190000056e01100197000000000501004b000000000300a0190000056e0110009c00000000010400190000000001036019000000000101004b0000040f0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005700330009c0000040f0000213d0000006401100370000000000101043b0000056f0310009c0000040f0000213d0000000401100039156f0ae20000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019156f0afd0000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000005610430009c000002980000613d000005620430009c000004020000613d000005630330009c0000040f0000c13d000000040320008a0000056e04000041000000400530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000403100370000000000303043b000800000003001d0000056f0330009c0000040f0000213d00000008030000290000000002320049000700000002001d000000040220008a0000056e03000041000000a00420008c000000000400001900000000040340190000056e02200197000000000502004b000000000300a0190000056e0220009c00000000020400190000000002036019000000000202004b0000040f0000c13d0000002402100370000000000202043b000600000002001d000005700220009c0000040f0000213d00000000020004110000000903000029000000000232004b000004de0000c13d00000008020000290000000402200039000000000121034f000000000201043b0000057401000041000000800010043f000500000002001d000000840020043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800402000039156f155f0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001360000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000012e0000413d000000000705004b000001450000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004f60000613d0000001f01400039000000600110018f00000080021001bf000400000002001d000000400020043f000000200230008c0000040f0000413d000000800200043d000000000202004b0000071b0000c13d00000571020000410000000404000029000000000024043500000084021001bf00000020030000390000000000320435000000c40210003900000590030000410000000000320435000000a4011000390000001a02000039000000000021043500000040014002100000057b011001c700001571000104300000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000400310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000003020003670000000401200370000000000101043b000005700310009c0000040f0000213d0000002402200370000000000202043b156f0bd80000040f0000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000800000001001d0000056f0110009c0000040f0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000001bb0000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000600000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001dc0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001d40000413d000000000705004b000001eb0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000061f0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000601000029156f0bd80000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029156f0c040000040f00000006010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000700000004001d0000056f0440009c0000040f0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000002470000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000400000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000002680000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002600000413d000000000705004b000002770000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cf0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029156f10ac0000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000040f0000213d0000000002000411000000020100003900000002011001880000044e0000c13d0000ffff0120008c0000044e0000a13d000000400100043d0000006402100039000005a90300004100000000003204350000004402100039000005aa030000410000000000320435000000240210003900000024030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000000040320008a0000056e04000041000000600530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000141034f000000000101043b000700000001001d0000056f0110009c0000040f0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000040f0000213d000000020100003900000002011001880000000101100270000003040000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b000004420000613d0000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003250000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000031d0000413d000000000705004b000003340000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006450000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029156f0afd0000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029156f0c040000040f00000008010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005700110009c0000040f0000213d00000009010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007450000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007450000213d00000000001304350000000001020433000000010210008c000007450000213d0000000102000039000000400400043d000000000101004b000003dc0000c13d000005a50100004100000000001404350000000401400039000000090200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000900000004001d156f155f0000040f000000090a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b40000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ac0000413d000000000705004b000003c40000613d0000000506600210000000000761034f000000090800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007630000613d0000001f01400039000000600210018f00000009010000290000000001120019000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000200230008c0000040f0000413d00000009020000290000000002020433000000000202004b00000000020000190000000102006039000000000401001900000000002404350000055d010000410000055d0240009c0000000001044019000000400110021000000593011001c7000015700001042e0000000001000416000000000101004b0000040f0000c13d000000040100008a00000000011000310000056e02000041000000200310008c000000000300001900000000030240190000056e01100197000000000401004b000000000200a0190000056e0110009c00000000010300190000000001026019000000000101004b0000040f0000c13d00000004010000390000000301100367000000000101043b000005700210009c0000040f0000213d000000400200043d000005a60320009c000004ae0000413d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000040320008a0000056e04000041000000800530008c000000000500001900000000050440190000056e03300197000000000603004b000000000400a0190000056e0330009c00000000030500190000000003046019000000000303004b000004110000613d000000000100001900001571000104300000002403100370000000000303043b000900000003001d0000004403100370000000000303043b0000056f0430009c0000040f0000213d00000023043000390000056e05000041000000000624004b000000000600001900000000060580190000056e072001970000056e04400197000000000874004b0000000005008019000000000474013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000404300039000000000441034f000000000404043b000800000004001d0000056f0440009c0000040f0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000040f0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000040f0000213d000000020100003900000002011001880000000101100270000004400000c13d0000000001000411000005910110009c00000000010000190000000101004039000000000101004b0000066b0000c13d0000057101000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005aa01000041000000c40010043f000005a901000041000000e40010043f000005ab010000410000157100010430000800000002001d0000000000200435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400400043d000005870240009c000003fc0000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007450000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007450000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c0000074b0000c13d000000000101004b0000074b0000c13d00000001020000390000000701000029000900000002001d0000000000210435000000080100002900000570011001970000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007450000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d000000090200002900000000002104350000055d0200004100000000030004140000055d0430009c00000000030280190000055d0410009c00000000010280190000004001100210000000c002300210000000000112019f00000598011001c70000800d02000039000000020300003900000599040000410000000805000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000400200043d000005870320009c000003fc0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007450000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007450000213d00000000003104350000000003020433000000010230008c000007450000213d000000400200043d00000000033204360000000001010433000000010410008c000007450000213d00000000001304350000055d010000410000055d0320009c00000000010240190000004001100210000005a7011001c7000015700001042e0000057101000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f0000057201000041000000c40010043f000005730100004100001571000104300000057101000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f0000059a01000041000000c40010043f0000059b01000041000000e40010043f0000059c01000041000001040010043f0000059d010000410000157100010430000000400200043d0000001f0430018f0000000503300272000005030000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004fb0000413d000000000504004b000005120000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b0000056e09000041000000000a58004b000000000a000019000000000a0980190000056e0b5001970000056e0c800197000000000dbc004b0000000009008019000000000bbc013f0000056e0bb0009c00000000090ac019000000000909004b0000040f0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000008810000c13d00000001077000390000000008e7004b000005210000413d0000000001000416000000000161004b000006b70000c13d000000c30100008a0000000001310049000200000001001d0000057001400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b000000020300002900000000033000310000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d0000000002f20019000700000002001d0000006002200039000600000002001d000000000121034f000000000101043b000300000001001d00000578010000410000000000100439000000090100002900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000800000009001d156f155f0000040f000000070b0000290000000809000029000000040f000029000000050e00002900000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400a00043d0000059e0100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005700210009c0000040f0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000008402a00039000000000012043500000006010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b0000056e05000041000000000643004b000000000600001900000000060580190000056e044001970000056e07300197000000000847004b0000000005008019000000000447013f0000056e0440009c00000000040600190000000004056019000000000404004b0000040f0000c13d0000000003b30019000000000131034f000000000101043b0000056f0410009c0000040f0000213d000000200330003900000000021200490000056e04000041000000000523004b000000000500001900000000050420190000056e022001970000056e06300197000000000726004b0000000004008019000000000226013f0000056e0220009c00000000020500190000000002046019000000000202004b0000040f0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000005d70000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000005cf0000413d0000001f05100190000005e60000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000903000029000000040330008c000006180000613d0000001f01100039000000200300008a000000000131016f0000059f030000410000059f0410009c00000000010380190000055d030000410000055d04a0009c00070000000a001d000000000403001900000000040a401900000040044002100000006001100210000000000141019f0000055d0420009c0000000002038019000000c002200210000000000121019f000005a0011000410000000303000029000000000203004b0000060b0000613d0000058e011001c7000080090200003900000009040000290000000005000019156f155a0000040f0000060d0000013d0000000902000029156f155a0000040f0004000000010355000000000301001900000060033002700001055d0030019d0000055d043001970000000102200190000000050e000029000000040f0000290000000809000029000000070a000029000008140000613d0000056f01a0009c000003fc0000213d0000004000a0043f00000001099000390000000001e9004b000005490000413d000000a90000013d000000400200043d0000001f0430018f00000005033002720000062c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006240000413d000000000504004b0000063b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000006520000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000064a0000413d000000000504004b000006610000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000059201000041000000800010043f0000000001000411000500000001001d000000840010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000575011001c70000800302000039156f155a0000040f000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000068a0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000006820000413d000000000705004b000006990000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006f50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000040f0000413d000000800200043d0000000501000029156f0bd80000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029156f10ac0000040f00000005010000290000057001100197000000400200043d00000000001204350000055d010000410000055d0320009c0000000001024019000000400110021000000593011001c7000015700001042e000000400100043d0000008402100039000005a20300004100000000003204350000006402100039000005a30300004100000000003204350000004402100039000005a4030000410000000000320435000000240210003900000045030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000006dc0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d40000413d000000000504004b000006eb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0430018f0000000503300272000007020000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006fa0000413d000000000504004b000007110000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000c002100039000000400020043f00000004020000290000000000020435000000a001100039000200000001001d000000000001043500000008010000290000002401100039000100000001001d0000000301100367000000000101043b000300000001001d000005700110009c0000040f0000213d00000003010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039156f155f0000040f00000001022001900000040f0000613d000000000101043b00000004020000290000000002020433000000010320008c000007450000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000002020000290000000002020433000000010320008c000007890000a13d000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000000400100043d000000840210003900000594030000410000000000320435000000640210003900000595030000410000000000320435000000440210003900000596030000410000000000320435000000240210003900000043030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c0000000001028019000000400110021000000597011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000007700000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007680000413d000000000504004b0000077f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000080100002900000084021000390000000301000367000000000221034f000000000202043b0000000703000029000000230330008a0000056e04000041000000000532004b000000000500001900000000050480190000056e033001970000056e06200197000000000736004b0000000004008019000000000336013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d000000080300002900000000023200190000000403200039000000000331034f000000000303043b000700000003001d0000056f0330009c0000040f0000213d0000000703000029000000000330007900000024052000390000056e02000041000000000435004b000000000400001900000000040220190000056e03300197000400000005001d0000056e05500197000000000635004b0000000002008019000000000335013f0000056e0330009c000000000204c019000000000202004b0000040f0000c13d00000008020000290000004402200039000000000121034f000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000040f0000c13d0000000002000416000800000002001d000000000101004b0000083a0000c13d0000000801000029000000000101004b000008870000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000002401400039000000050200002900000000002104350000058d0100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008fa0000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f00000001010000290000000301100367000000000701043b000005700170009c0000040f0000213d0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f0400004100000006050000290000000506000029156f155a0000040f0000000101200190000000a90000c13d0000040f0000013d000000400200043d0000001f0340018f0000000504400272000008210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008190000413d000000000503004b000008300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000801000029000000000101004b0000089c0000c13d00000578010000410000000000100439000080020200003900000004002004430000055d0100004100000000030004140000055d0430009c0000000001034019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057c01000041000000000014043500000004014000390000000302000029000000000021043500000005010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039000200000002001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000008d40000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000000801000029000000000101004b000008780000613d000000000100041600000580011001970000000000010417000000000100041400000007020000290000000403000029000000000232001a0000055d04300197000008810000413d0000000003000031000000000523004b000009460000813d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d00000064021000390000058a03000041000000000032043500000044021000390000058b030000410000000000320435000000240210003900000038030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000058c011001c70000157100010430000005780100004100000000001004390000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000302000029000000000021043500000009010000290000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000009200000613d00000009010000290000056f0110009c000003fc0000213d0000000901000029000000400010043f0000083d0000013d000000400200043d0000001f0340018f0000000504400272000008e10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008d90000413d000000000503004b000008f00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000009070000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008ff0000413d000000000503004b000009160000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000092d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000009250000413d000000000503004b0000093c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000000304400367000005810510009c0000095b0000413d000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c7000015710001043000000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af0000000302000029000000060d000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000a7b0000613d0000003f013000390000058401100197000000400200043d0000000001120019000700000002001d000000000221004b000000000200001900000001020040390000056f0410009c000003fc0000213d0000000102200190000003fc0000c13d000000400010043f000000070100002900000000073104360000001f013000390000000501100272000009890000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000009810000413d000900000007001d000000000100004b0000098c0000613d0000000101000031000000000113004b0000040f0000213d00000004020003670000001f0130018f00000005033002720000099d0000613d0000000004000019000000050540021000000009060000290000000006560019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000009940000413d000000000401004b000009ad0000613d0000000503300210000000000232034f000000090400002900000000033400190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000020200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400400043d000005850100004100000000001404350000000401400039000000030200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000a960000613d00000008010000290000056f0110009c000003fc0000213d0000000801000029000000400010043f000000070100002900000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000040f0000c13d000000090200002900000000020204330000056f0320009c0000040f0000213d0000000903000029000000000131001900000000023200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b0000040f0000c13d00000000230204340000056f0430009c000003fc0000213d00000005043002100000003f04400039000000200500008a000000000454016f000000080500002900000000045400190000056f0540009c000003fc0000213d000000400040043f0000000804000029000000000034043500000006033002100000000003230019000000000413004b0000040f0000213d000000000432004b00000a2f0000813d000000080400002900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b0000040f0000c13d000000400500043d000005870650009c000003fc0000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000a140000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000001022001900000040f0000613d000000000101043b000000000101004b0000040f0000613d000000400300043d000000240130003900000040020000390000000000210435000005880100004100000000001304350000000401300039000000030200002900000000002104350000000801000029000000000101043300000044023000390000000000120435000900000003001d0000006402300039000000000301004b00000a5e0000613d000000000300001900000008040000290000002004400039000800000004001d0000000004040433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000a520000413d000000090400002900000000014200490000055d020000410000055d0340009c0000000003020019000000000304401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000abc0000613d00000009010000290000056f0110009c000003fc0000213d000007fe0000013d0000001f0430018f000000050230027200000a860000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a7f0000413d000000000504004b00000a940000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000aa30000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000a9b0000413d000000000503004b00000ab20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f000000050440027200000ac90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ac10000413d000000000503004b00000ad80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000001f031000390000056e04000041000000000523004b000000000500001900000000050440190000056e062001970000056e03300197000000000763004b000000000400a019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000afb0000613d0000000303100367000000000303043b0000056f0430009c00000afb0000213d00000020011000390000000004310019000000000224004b00000afb0000213d0000000002030019000000000001042d00000000010000190000157100010430000300000000000200000000070004140000000008450019000000000558004b000000000500001900000001050040390000055d04400197000000010550019000000b8b0000c13d0000000006000031000000000586004b00000b8b0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005810570009c00000b990000813d00000000028600490000055d0220019700000000022403df000000c0017002100000058201100197000005ac011001c700000000011203af0000801002000039156f15640000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000bab0000613d0000003f013000390000058402100197000000400100043d0000000002210019000000000412004b000000000400001900000001040040390000056f0520009c00000b910000213d000000010440019000000b910000c13d000000400020043f00000000023104360000001f04300039000000050440027200000b3a0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000b320000413d000000000400004b00000b3c0000613d0000000104000031000000000443004b00000b970000213d00000004050003670000001f0430018f000000050330027200000b4c0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000b440000413d000000000604004b00000b5b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c0000000304000029000000020500002900000bc60000c13d0000000002020433000000400100043d000000a0031000390000000000230435000000800210003900000000005204350000006002100039000000010300002900000000003204350000057002400197000000400310003900000000002304350000002002100039000005ae030000410000000000320435000000a0030000390000000000310435000005af0310009c00000b910000213d000000c003100039000000400030043f0000055d030000410000055d0420009c0000000002038019000000400220021000000000010104330000055d0410009c00000000010380190000006001100210000000000121019f00000000020004140000055d0420009c0000000002038019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000b970000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000004101000039000000040010043f0000058601000041000015710001043000000000010000190000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000bb60000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000baf0000413d000000000504004b00000bc40000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400100043d0000004402100039000005ad03000041000000000032043500000024021000390000001f030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c70000157100010430000000400300043d0000006004300039000000000024043500000570011001970000004002300039000000000012043500000060010000390000000001130436000005b0020000410000000000210435000005b10230009c00000bfc0000813d0000008002300039000000400020043f0000055d020000410000055d0410009c0000000001028019000000400110021000000000030304330000055d0430009c00000000030280190000006003300210000000000113019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000112019f0000058e011001c70000801002000039156f155f0000040f000000010220019000000c020000613d000000000101043b0000057001100197000000000001042d000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000000000100001900001571000104300008000000000002000700000001001d000000000101004b00000ef70000613d000300000004001d000400000003001d000000400400043d000200000002001d00000570022001970000ffff0120008c00000f090000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c350000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c2d0000413d000000000705004b00000c440000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f1d0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c00000ee50000213d000000010110019000000ee50000c13d000000400040043f0000001f0130008c00000ee30000a13d00000000010a0433000000000101004b000000040140003900000f430000c13d000005b4020000410000000000240435000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c7d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c750000413d000000000705004b00000c8c0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f530000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000f790000c13d000005740100004100000000001404350000000401400039000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000cc00000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000cb80000413d000000000705004b00000ccf0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000f8a0000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c00000ee50000213d000000400040043f000000200130008c00000ee30000413d00000000010a0433000000000101004b00000fb00000613d000005870140009c00000ee50000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f0000000503000029000000010220019000000ee30000613d000000000101043b0000000002030433000000020320008c00000eeb0000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000eeb0000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b00000d790000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000103a0000613d00000001020000290000056f0120009c00000ee50000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010600000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f00000000010004160000058001100197000000000001041700000daa0000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010860000613d00000005020000290000056f0120009c00000ee50000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d04400197000000010330019000000ef10000c13d0000000003000031000000000523004b00000ef10000413d0000000304400367000005810510009c00000fc10000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000202000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d033001970004000000010355000000010220019000000fd30000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c00000ee50000213d000000010220019000000ee50000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000de90000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000de10000413d000000000100004b00000deb0000613d0000000101000031000000000113004b00000ee30000213d00000004020003670000001f0130018f000000050330027200000dfb0000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000df30000413d000000000401004b00000e0a0000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d043001970004000000010355000000010220019000000fee0000613d00000006090000290000056f0190009c000000050100002900000ee50000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b000000040400002900000ee30000c13d00000000020404330000056f0320009c00000ee30000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b00000ee30000c13d00000000230204340000056f0430009c00000ee50000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c00000ee50000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000ee30000213d000000000432004b00000e890000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b00000ee30000c13d000000400500043d000005870650009c00000ee50000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000e6e0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f0000000606000029000000010220019000000ee30000613d000000000101043b000000000101004b00000ee30000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000eb50000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000eab0000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000010140000613d00000006020000290000056f0120009c000000000102001900000ee50000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f000000010120019000000ee30000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f2a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f220000413d000000000504004b00000f390000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b303000041000000000032043500000024024000390000001503000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f600000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f580000413d000000000504004b00000f6f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b5020000410000000000210435000000240140003900000013020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f000000050330027200000f970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f8f0000413d000000000504004b00000fa60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f000000050230027200000fde0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000fd70000413d000000000504004b00000fec0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f000000050440027200000ffb0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000ff30000413d000000000503004b0000100a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010210000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010190000413d000000000503004b000010300000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010470000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000103f0000413d000000000503004b000010560000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000106d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000010650000413d000000000503004b0000107c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000010930000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000108b0000413d000000000503004b000010a20000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300008000000000002000300000005001d000700000001001d000000000101004b000013a50000613d000400000003001d000200000004001d000000400400043d000100000002001d00000570022001970000ffff0120008c000013b70000a13d000005b20100004100000000001404350000000401400039000800000002001d00000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039000600000002001d000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000010de0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010d60000413d000000000705004b000010ed0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000013cb0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b000000000100001900000001010040390000056f0240009c000013930000213d0000000101100190000013930000c13d000000400040043f0000001f0130008c000013910000a13d00000000010a0433000000000101004b000013f10000c13d000005b40100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800302000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011260000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000111e0000413d000000000705004b000011350000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014020000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000000401400039000014280000c13d00000574020000410000000000240435000000070200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800402000039000500000004001d156f155f0000040f000000050a000029000000000301001900000060033002700000055d03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000011690000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000011610000413d000000000705004b000011780000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000014380000613d0000001f01400039000000600110018f0000000004a100190000056f0140009c000013930000213d000000400040043f000000200130008c000013910000413d00000000010a0433000000000101004b0000145e0000613d000005870140009c000013930000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000013990000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000576011001c70000801002000039000500000004001d156f155f0000040f00000005030000290000000102200190000013910000613d000000000101043b0000000002030433000000010320008c0000000405000029000013990000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000013990000213d000000000301041a0000057704000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000000100041600000578020000410000000000200439000000000101004b000012270000613d0000800a0100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039000500000002001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057a01000041000000000014043500000044014000390000000002000416000000000021043500000024014000390000000802000029000000000021043500000000010004100000057001100197000000040240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057b011001c70000800a02000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014e80000613d00000004020000290000056f0120009c000013930000213d000000400020043f00000578010000410000000000100439000000050200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000150e0000613d00000005020000290000056f0120009c000013930000213d000000400020043f000000000100041600000580011001970000000000010417000012580000013d000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d0000057c01000041000000000014043500000004014000390000000802000029000000000021043500000007010000290000057d011001970000057e011001c7000000240240003900000000001204350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f0000057f011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000015340000613d00000005020000290000056f0120009c000013930000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b000000000300001900000001030040390000055d0440019700000001033001900000139f0000c13d0000000003000031000000000523004b0000139f0000413d0000000304400367000005810510009c0000146f0000813d000000000500041100000000022300490000055d0220019700000000022403df000000c001100210000005820110019700000583011001c700000000011203af000300000005001d000005700d5001970000000102000029156f15690000040f000000000301001900000060033002700001055d0030019d0000055d0330019700040000000103550000000102200190000014810000613d0000003f013000390000058401100197000000400500043d0000000001150019000000000251004b000000000200001900000001020040390000056f0410009c000013930000213d0000000102200190000013930000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000012970000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000128f0000413d000000000100004b000012990000613d0000000101000031000000000113004b000013910000213d00000004020003670000001f0130018f0000000503300272000012a90000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000012a10000413d000000000401004b000012b80000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f000000000013043500000578010000410000000000100439000000060200002900000004002004430000055d0100004100000000040004140000055d0340009c0000000001044019000000c00110021000000579011001c7000400000007001d156f155f0000040f0000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400400043d000005850100004100000000001404350000000401400039000000080200002900000000002104350000055d0100004100000000020004140000055d0320009c00000000020180190000055d0340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f00000586011001c70000800202000039156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d04300197000400000001035500000001022001900000149c0000613d00000006090000290000056f0190009c0000000501000029000013930000213d000000400090043f00000000010104330000056e02000041000000200310008c000000000300001900000000030240190000056e04100197000000000504004b000000000200a0190000056e0440009c000000000203c019000000000202004b0000000404000029000013910000c13d00000000020404330000056f0320009c000013910000213d000000000141001900000000024200190000001f032000390000056e04000041000000000513004b000000000500001900000000050480190000056e033001970000056e06100197000000000763004b0000000004008019000000000363013f0000056e0330009c00000000030500190000000003046019000000000303004b000013910000c13d00000000230204340000056f0430009c000013930000213d00000005043002100000003f04400039000000200500008a000000000454016f00000000049400190000056f0540009c000013930000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000013910000213d000000000432004b000013370000813d000000000409001900000000052100490000056e06000041000000400750008c000000000700001900000000070640190000056e05500197000000000805004b000000000600a0190000056e0550009c00000000050700190000000005066019000000000505004b000013910000c13d000000400500043d000005870650009c000013930000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000131c0000413d00000578010000410000000000100439000080050100003900000004001004430000055d0100004100000000020004140000055d0320009c0000000001024019000000c00110021000000579011001c70000800202000039156f155f0000040f00000006060000290000000102200190000013910000613d000000000101043b000000000101004b000013910000613d000000400700043d000000240170003900000040020000390000000000210435000005880100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000013630000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000013590000413d00000000017200490000055d020000410000055d0370009c0000000003020019000000000307401900000040033002100000055d0410009c00000000010280190000006001100210000000000131019f00000000030004140000055d0430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d156f155a0000040f000000000301001900000060033002700001055d0030019d0000055d0430019700040000000103550000000102200190000014c20000613d00000006020000290000056f0120009c0000000001020019000013930000213d000000400010043f0000055d0100004100000000020004140000055d0320009c0000000001024019000000c0011002100000058e011001c70000800d0200003900000004030000390000058f04000041000000030500002900000007060000290000000807000029156f155a0000040f0000000101200190000013910000613d000000000001042d00000000010000190000157100010430000005a10100004100000000001004350000004101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000002101000039000000040010043f00000586010000410000157100010430000005a10100004100000000001004350000001101000039000000040010043f00000586010000410000157100010430000000400100043d0000004402100039000005b803000041000000000032043500000024021000390000001b030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000006401400039000005b60200004100000000002104350000004401400039000005b7020000410000000000210435000000240140003900000028020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000058c011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000013d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d00000413d000000000504004b000013e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004401400039000005b3020000410000000000210435000000240140003900000015020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f00000005033002720000140f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014070000413d000000000504004b0000141e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000004402400039000005b503000041000000000032043500000024024000390000001303000039000000000032043500000571020000410000000000240435000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400200043d0000001f0430018f0000000503300272000014450000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000143d0000413d000000000504004b000014540000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f000015710001043000000044014000390000059002000041000000000021043500000024014000390000001a020000390000000000210435000005710100004100000000001404350000000401400039000000200200003900000000002104350000055d010000410000055d0240009c000000000104401900000040011002100000057b011001c70000157100010430000000400100043d000000440210003900000589030000410000000000320435000000240210003900000008030000390000000000320435000005710200004100000000002104350000000402100039000000200300003900000000003204350000055d020000410000055d0310009c000000000102801900000040011002100000057b011001c700001571000104300000001f0430018f00000005023002720000148c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014850000413d000000000504004b0000149a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000157100010430000000400200043d0000001f0340018f0000000504400272000014a90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014a10000413d000000000503004b000014b80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014cf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014c70000413d000000000503004b000014de0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000014f50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000014ed0000413d000000000503004b000015040000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f00000005044002720000151b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015130000413d000000000503004b0000152a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f0000157100010430000000400200043d0000001f0340018f0000000504400272000015410000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015390000413d000000000503004b000015500000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000055d0100004100000001030000310000055d0430009c00000000030180190000055d0420009c000000000102401900000040011002100000006002300210000000000112019f00001571000104300000155d002104210000000102000039000000000001042d0000000002000019000000000001042d00001562002104230000000102000039000000000001042d0000000002000019000000000001042d00001567002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000156d002104290000000102000039000000000001042d0000000002000019000000000001042d0000156f00000432000015700001042e00001571000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000ec8067c600000000000000000000000000000000000000000000000000000000ec8067c700000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb6000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000e9f18c17000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000579952fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0c2e4ff97000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbfad7e232e000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e554686520636f64652068617368206973206e6f74206b6e6f776e0000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000800000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb00000000000000000000000000000000000001040000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f4de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c20000000000000000000000000000000000000008400000080000000000000000000000001000000000000000000000000000000000000000000000000000000006b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f63bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f0000000000000000000000000000000000000000000000000000000000000000000000000034a847ba485cad38c9fa78abfe24fa6106d1853962dad77d41720e1a6e146113", + "bytecode": "0x0005000000000002000900000000000200000000030100190000006003300270000005a80430019700040000004103550003000000010355000005a80030019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000009b0000c13d0000000002000031000000040120008c0000048b0000413d0000000301000367000000000301043b000000e003300270000005aa0430009c000000a30000a13d000005ab0430009c000000dd0000a13d000005ac0430009c000001750000213d000005af0430009c000001f20000613d000005b00130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d0000000002000411000000020100003900000002011001880000003b0000c13d0000ffff0120008c000000c80000213d000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400400043d000005ca0240009c000004c00000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007e80000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007e80000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c000007ee0000c13d000000000101004b000007ee0000c13d00000001020000390000000701000029000900000002001d00000000002104350000000801000029000005bd011001970000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007e80000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d00000009020000290000000000210435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005d0040000410000000805000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d0000000001000416000000000101004b0000048b0000c13d000000200100003900000100001004430000012000000443000005a9010000410000169b0001042e000005b40430009c0000013d0000213d000005b80430009c000003350000613d000005b90430009c000003570000613d000005ba0130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d000000000200041100000002010000390000000201100188000004c60000c13d000005c70120009c000004c60000413d000000400100043d0000006402100039000005ec0300004100000000003204350000004402100039000005ed030000410000000000320435000000240210003900000024030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000005b10430009c000002270000613d000005b20430009c000003e10000613d000005b30330009c0000048b0000c13d000000040220008a000005bb03000041000000200420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000000401100370000000000201043b0000000001000411000080070110008c0000048d0000c13d000005c101000041000000800010043f000900000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001130000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004970000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c0000048b0000413d000000800300043d000000000303004b0000052d0000c13d000005be03000041000000000031043500000084032001bf00000020040000390000000000430435000000c403200039000005c5040000410000000000430435000000a4022000390000001a0300003900000000003204350000004001100210000005c6011001c70000169c00010430000005b50430009c000004280000613d000005b60130009c000004750000613d000005b70130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d0000000002000031000000040120008a000005bb03000041000000800410008c00000000040000190000000004034019000005bb01100197000000000501004b000000000300a019000005bb0110009c00000000010400190000000001036019000000000101004b0000048b0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005bd0330009c0000048b0000213d0000006401100370000000000101043b000005bc0310009c0000048b0000213d0000000401100039169a09060000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019169a09210000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000005ad0430009c000002ab0000613d000005ae0330009c0000048b0000c13d000000040320008a000005bb04000041000000400530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000900000003001d000005bc0330009c0000048b0000213d00000009030000290000000002320049000800000002001d000000040220008a000005bb03000041000000a00420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000002402100370000000000202043b000700000002001d000005bd0220009c0000048b0000213d00000000020004100000000003000411000000000223004b000005720000c13d00000009020000290000000402200039000000000121034f000000000201043b000005c101000041000000800010043f000600000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001c60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001be0000413d000000000705004b000001d50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000067f0000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200230008c0000048b0000413d000000800200043d000000000202004b000007bf0000c13d000005be020000410000000504000029000000000024043500000084021001bf00000020030000390000000000320435000000c402100039000005c5030000410000000000320435000000a4011000390000001a0200003900000000002104350000004001400210000005c6011001c70000169c00010430000000040320008a000005bb04000041000000200530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000e04043b000005bc04e0009c0000048b0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000048b0000213d000000090500008a0000000004000411000000000554016f000080070550008c0000051f0000c13d00000000050e004b0000057c0000c13d0000000001000416000000000101004b000004ed0000613d000007550000013d000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000048b0000213d0000000201000039000000020110018800000001011002700000025e0000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000600000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000027f0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002770000413d000000000705004b0000028e0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006a50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000601000029169a09fc0000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029169a0a320000040f0000000601000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000800000004001d000005bc0440009c0000048b0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000002e70000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003080000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003000000413d000000000705004b000003170000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000076d0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000501000029169a09fc0000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029169a0eda0000040f0000000501000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000400310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000003020003670000000401200370000000000101043b000005bd0310009c0000048b0000213d0000002402200370000000000202043b169a09fc0000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000700000001001d000005bc0110009c0000048b0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000048b0000213d000000020100003900000002011001880000000101100270000003910000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b20000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003aa0000413d000000000705004b000003c10000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cb0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029169a0a320000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005bd0110009c0000048b0000213d00000009010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007e80000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007e80000213d00000000001304350000000002020433000000010120008c000007e80000213d0000000101000039000000000202004b000004200000c13d0000000901000029000005e70110019800000000010000190000082c0000c13d000000010110018f000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000700000004001d000005bc0440009c0000048b0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000004670000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000006f10000c13d000005be01000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005ed01000041000000c40010043f000005ec01000041000000e40010043f000005ee010000410000169c000104300000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000005bd0210009c000004bd0000a13d00000000010000190000169c00010430000005be01000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000005e001000041000000c40010043f000005c0010000410000169c00010430000000400200043d0000001f0430018f0000000503300272000004a40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000049c0000413d000000000504004b000004b30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d000005e90320009c000004ef0000413d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d0000000000310435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005eb040000410000000805000029169a16850000040f00000001012001900000048b0000613d00000000010000190000169b0001042e0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007e80000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007e80000213d00000000003104350000000003020433000000010230008c000007e80000213d000000400200043d00000000033204360000000001010433000000010410008c000007e80000213d0000000000130435000005a801000041000005a80320009c00000000010240190000004001100210000005ea011001c70000169b0001042e000005be01000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f000005d101000041000000c40010043f000005d201000041000000e40010043f000005d301000041000001040010043f000005d4010000410000169c000104300000000001000416000000000101004b000007400000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400400043d000000240140003900000009020000290000000000210435000005e4010000410000000000140435000000040140003900008010020000390000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000008060000613d0000000801000029000005bc0110009c000004c00000213d0000000801000029000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000080070500003900008010070000390000000906000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d000005be01000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f000005bf01000041000000c40010043f000005c0010000410000169c0001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b000005bb09000041000000000a58004b000000000a000019000000000a098019000005bb0b500197000005bb0c800197000000000dbc004b0000000009008019000000000bbc013f000005bb0bb0009c00000000090ac019000000000909004b0000048b0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000007b90000c13d00000001077000390000000008e7004b000005810000413d0000000001000416000000000161004b000007550000c13d000000c30100008a0000000001310049000200000001001d000005bd01400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b00000002030000290000000003300031000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000002f20019000800000002001d0000006002200039000700000002001d000000000121034f000000000101043b000300000001001d000005d50100004100000000001004390000000001000410000600000001001d0000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000900000009001d169a168a0000040f000000080b0000290000000909000029000000040f000029000000050e00002900000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400a00043d000005d70100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005bd0210009c0000048b0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000048b0000c13d0000008402a00039000000000012043500000007010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b000005bb05000041000000000643004b00000000060000190000000006058019000005bb04400197000005bb07300197000000000847004b0000000005008019000000000447013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000003b30019000000000131034f000000000101043b000005bc0410009c0000048b0000213d00000020033000390000000002120049000005bb04000041000000000523004b00000000050000190000000005042019000005bb02200197000005bb06300197000000000726004b0000000004008019000000000226013f000005bb0220009c00000000020500190000000002046019000000000202004b0000048b0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000006380000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000006300000413d0000001f05100190000006470000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000604000029000000040340008c000006780000613d0000001f01100039000000200300008a000000000131016f000005d803000041000005d80510009c0000000001038019000005a803000041000005a805a0009c00080000000a001d000000000503001900000000050a401900000040055002100000006001100210000000000151019f000005a80520009c0000000002038019000000c002200210000000000121019f000005d9011000410000000303000029000000000203004b0000066b0000613d000005da011001c700008009020000390000000005000019169a16850000040f0000066d0000013d0000000002040019169a16850000040f000400000001035500000000030100190000006003300270000105a80030019d000005a8043001970000000102200190000000050e000029000000040f0000290000000909000029000000080a000029000008e00000613d000005bc01a0009c000004c00000213d0000004000a0043f00000001099000390000000001e9004b000005a90000413d000004ed0000013d000000400200043d0000001f0430018f00000005033002720000068c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006840000413d000000000504004b0000069b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006b20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006aa0000413d000000000504004b000006c10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d00000413d000000000504004b000006e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005c801000041000000800010043f0000000001000411000400000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000007100000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000007080000413d000000000705004b0000071f0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007930000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029169a0eda0000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400100043d0000008402100039000005dd0300004100000000003204350000006402100039000005de0300004100000000003204350000004402100039000005df030000410000000000320435000000240210003900000045030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000077a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007720000413d000000000504004b000007890000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000007a00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007980000413d000000000504004b000007af0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000c002100039000000400020043f00000005020000290000000000020435000000a001100039000300000001001d0000000000010435000000090100002900000024011000390000000301100367000000000101043b000400000001001d000005bd0110009c0000048b0000213d00000004010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000005020000290000000002020433000000010320008c000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000003020000290000000002020433000000010320008c0000089e0000a13d000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000000400100043d0000008402100039000005cb0300004100000000003204350000006402100039000005cc0300004100000000003204350000004402100039000005cd030000410000000000320435000000240210003900000043030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0340018f0000000504400272000008130000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000080b0000413d000000000503004b000008220000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400400043d000800000004001d000005e8010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a168a0000040f000000080a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008520000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000084a0000413d00000000090a0019000000000705004b000008620000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000008780000613d0000001f01400039000000600210018f0000000001920019000000000221004b00000000020000190000000102004039000005bc0410009c000004c00000213d0000000102200190000004c00000c13d000000400010043f000000200130008c0000048b0000413d0000000001090433000000000101004b000000000100001900000001010060390000041f0000013d000000400200043d0000001f0430018f0000000503300272000008850000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087d0000413d000000000504004b000008940000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000090100002900000084021000390000000301000367000000000221034f000000000202043b0000000803000029000000230330008a000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d000000090300002900000000023200190000000403200039000000000131034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d000000080100002900000000011000790000002404200039000005bb02000041000000000314004b00000000030000190000000003022019000005bb01100197000500000004001d000005bb04400197000000000514004b0000000002008019000000000114013f000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000009010000290000004401100039169a0a280000040f000000000601001900000007010000290000000402000029000000060300002900000005040000290000000805000029169a13880000040f00000000010000190000169b0001042e000000400200043d0000001f0340018f0000000504400272000008ed0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008e50000413d000000000503004b000008fc0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000001f03100039000005bb04000041000000000523004b00000000050000190000000005044019000005bb06200197000005bb03300197000000000763004b000000000400a019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b0000091f0000613d0000000303100367000000000303043b000005bc0430009c0000091f0000213d00000020011000390000000004310019000000000224004b0000091f0000213d0000000002030019000000000001042d00000000010000190000169c00010430000300000000000200000000070004140000000008450019000000000558004b00000000050000190000000105004039000005a8044001970000000105500190000009af0000c13d0000000006000031000000000586004b000009af0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005ef0570009c000009bd0000813d0000000002860049000005a80220019700000000022403df000000c001700210000005f001100197000005f1011001c700000000011203af0000801002000039169a168f0000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000009cf0000613d0000003f01300039000005f202100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000005bc0520009c000009b50000213d0000000104400190000009b50000c13d000000400020043f00000000023104360000001f0430003900000005044002720000095e0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000009560000413d000000000400004b000009600000613d0000000104000031000000000443004b000009bb0000213d00000004050003670000001f0430018f0000000503300272000009700000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000009680000413d000000000604004b0000097f0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000003040000290000000205000029000009ea0000c13d0000000002020433000000400100043d000000a003100039000000000023043500000080021000390000000000520435000000600210003900000001030000290000000000320435000005bd02400197000000400310003900000000002304350000002002100039000005f4030000410000000000320435000000a0030000390000000000310435000005f50310009c000009b50000213d000000c003100039000000400030043f000005a803000041000005a80420009c000000000203801900000040022002100000000001010433000005a80410009c00000000010380190000006001100210000000000121019f0000000002000414000005a80420009c0000000002038019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f0000000102200190000009bb0000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000009da0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000009d30000413d000000000504004b000009e80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400100043d0000004402100039000005f303000041000000000032043500000024021000390000001f030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000400300043d00000060043000390000000000240435000005bd011001970000004002300039000000000012043500000060010000390000000001130436000005f7020000410000000000210435000005f80230009c00000a200000813d0000008002300039000000400020043f000005a802000041000005a80410009c000000000102801900000040011002100000000003030433000005a80430009c00000000030280190000006003300210000000000113019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f000000010220019000000a260000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c000104300000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b00000a300000c13d000000000001042d00000000010000190000169c000104300008000000000002000700000001001d000000000101004b00000d250000613d000300000004001d000400000003001d000000400400043d000200000002001d000005bd022001970000ffff0120008c00000d370000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000a630000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000a5b0000413d000000000705004b00000a720000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d4b0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c00000d130000213d000000010110019000000d130000c13d000000400040043f0000001f0130008c00000d110000a13d00000000010a0433000000000101004b000000040140003900000d710000c13d000005fb02000041000000000024043500000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aab0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000aa30000413d000000000705004b00000aba0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d810000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000da70000c13d000005c1010000410000000000140435000000040140003900000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aee0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ae60000413d000000000705004b00000afd0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000db80000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000dde0000613d000005ca0140009c00000d130000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f0000000503000029000000010220019000000d110000613d000000000101043b0000000002030433000000020320008c00000d190000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000d190000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b00000ba70000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e680000613d0000000102000029000005bc0120009c00000d130000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e8e0000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f00000000010004160000060101100197000000000001041700000bd80000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000eb40000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a804400197000000010330019000000d1f0000c13d0000000003000031000000000523004b00000d1f0000413d0000000304400367000005ef0510009c00000def0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000202000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a8033001970004000000010355000000010220019000000e010000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c00000d130000213d000000010220019000000d130000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000c170000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000c0f0000413d000000000100004b00000c190000613d0000000101000031000000000113004b00000d110000213d00000004020003670000001f0130018f000000050330027200000c290000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000c210000413d000000000401004b00000c380000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e1c0000613d0000000609000029000005bc0190009c000000050100002900000d130000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b000000040400002900000d110000c13d0000000002040433000005bc0320009c00000d110000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b00000d110000c13d0000000023020434000005bc0430009c00000d130000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c00000d130000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000d110000213d000000000432004b00000cb70000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b00000d110000c13d000000400500043d000005ca0650009c00000d130000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000c9c0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000606000029000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000ce30000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000cd90000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e420000613d0000000602000029000005bc0120009c000000000102001900000d130000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f000000010120019000000d110000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d580000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d500000413d000000000504004b00000d670000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fa030000410000000000320435000000240240003900000015030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d8e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d860000413d000000000504004b00000d9d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fc020000410000000000210435000000240140003900000013020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000dc50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000dbd0000413d000000000504004b00000dd40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f000000050230027200000e0c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000e050000413d000000000504004b00000e1a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f000000050440027200000e290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e210000413d000000000503004b00000e380000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e4f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e470000413d000000000503004b00000e5e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e6d0000413d000000000503004b00000e840000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e9b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e930000413d000000000503004b00000eaa0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000ec10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000eb90000413d000000000503004b00000ed00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300008000000000002000300000005001d000700000001001d000000000101004b000011d30000613d000400000003001d000200000004001d000000400400043d000100000002001d000005bd022001970000ffff0120008c000011e50000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f0c0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f040000413d000000000705004b00000f1b0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000011f90000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c000011c10000213d0000000101100190000011c10000c13d000000400040043f0000001f0130008c000011bf0000a13d00000000010a0433000000000101004b0000121f0000c13d000005fb010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f540000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f4c0000413d000000000705004b00000f630000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012300000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000000401400039000012560000c13d000005c102000041000000000024043500000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f970000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f8f0000413d000000000705004b00000fa60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012660000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000128c0000613d000005ca0140009c000011c10000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000011c70000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f00000005030000290000000102200190000011bf0000613d000000000101043b0000000002030433000000010320008c0000000405000029000011c70000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000011c70000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b000010550000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013160000613d0000000402000029000005bc0120009c000011c10000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000133c0000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f000000000100041600000601011001970000000000010417000010860000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013620000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a8044001970000000103300190000011cd0000c13d0000000003000031000000000523004b000011cd0000413d0000000304400367000005ef0510009c0000129d0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000102000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000012af0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000011c10000213d0000000102200190000011c10000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000010c50000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000010bd0000413d000000000100004b000010c70000613d0000000101000031000000000113004b000011bf0000213d00000004020003670000001f0130018f0000000503300272000010d70000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000010cf0000413d000000000401004b000010e60000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012ca0000613d0000000609000029000005bc0190009c0000000501000029000011c10000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000011bf0000c13d0000000002040433000005bc0320009c000011bf0000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000011bf0000c13d0000000023020434000005bc0430009c000011c10000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c000011c10000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000011bf0000213d000000000432004b000011650000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000011bf0000c13d000000400500043d000005ca0650009c000011c10000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000114a0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000011910000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000011870000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012f00000613d0000000602000029000005bc0120009c0000000001020019000011c10000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f0000000101200190000011bf0000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011fe0000413d000000000504004b000012150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fa020000410000000000210435000000240140003900000015020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000123d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012350000413d000000000504004b0000124c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fc030000410000000000320435000000240240003900000013030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000126b0000413d000000000504004b000012820000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000012ba0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000012b30000413d000000000504004b000012c80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000012d70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012cf0000413d000000000503004b000012e60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000012fd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012f50000413d000000000503004b0000130c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013230000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000131b0000413d000000000503004b000013320000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013490000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013410000413d000000000503004b000013580000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000136f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013670000413d000000000503004b0000137e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300009000000000002000500000005001d000700000003001d000800000002001d000600000001001d0000000002000416000000000106004b0000152f0000613d000300000004001d000400000002001d000000000102004b000013cb0000613d000005d50100004100000000001004390000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000000801000029000005bd01100197000000240240003900000000001204350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000016240000613d0000000902000029000005bc0120009c000015790000213d000000400020043f000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d0000000701000029000005ff0110019700000600011001c7000000400400043d00000024024000390000000000120435000005fe0100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039000100000002001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015850000613d0000000202000029000005bc0120009c0000000401000029000015790000213d000000400020043f000000000101004b000014070000613d0000000001000416000006010110019700000000000104170000000001000414000000030400002900000005030000290000000002430019000000000332004b00000000030000190000000103004039000005a80440019700000001033001900000157f0000c13d0000000003000031000000000523004b0000157f0000413d0000000304400367000005ef0510009c000015ab0000813d0000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af0000000602000029000005bd0d200197000000080200002900080000000d001d169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000015bd0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000015790000213d0000000102200190000015790000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000014460000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000143e0000413d000000000100004b000014480000613d0000000101000031000000000113004b000015770000213d00000004020003670000001f0130018f0000000503300272000014580000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000014500000413d000000000401004b000014670000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000001020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d00000603010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015d80000613d0000000609000029000005bc0190009c0000000501000029000015790000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000015770000c13d0000000002040433000005bc0320009c000015770000213d000000000114001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000015770000c13d0000000023020434000005bc0430009c000015790000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004490019000005bc0540009c000015790000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000015770000213d000000000432004b000014e60000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000015770000c13d000000400500043d000005ca0650009c000015790000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b000014cb0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000090200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000015120000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000015080000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000500000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015fe0000613d0000000502000029000005bc0120009c000015660000a13d000015790000013d000000000102004b0000164a0000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000000240140003900000007020000290000000000210435000005e40100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000165f0000613d0000000502000029000005bc0120009c000015790000213d0000000601000029000005bd01100197000800000001001d000000400020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000080500002900000007060000290000000907000029169a16850000040f0000000101200190000015770000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400200043d0000001f0340018f0000000504400272000015920000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000158a0000413d000000000503004b000015a10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000015c80000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015c10000413d000000000504004b000015d60000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000015e50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015dd0000413d000000000503004b000015f40000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000160b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016030000413d000000000503004b0000161a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000016310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016290000413d000000000503004b000016400000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0340018f00000005044002720000166c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016640000413d000000000503004b0000167b0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c0001043000001688002104210000000102000039000000000001042d0000000002000019000000000001042d0000168d002104230000000102000039000000000001042d0000000002000019000000000001042d00001692002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d001900001698002104290000000102000039000000000001042d0000000002000019000000000001042d0000169a000004320000169b0001042e0000169c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000e9f18c1600000000000000000000000000000000000000000000000000000000ecf95b8900000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb600000000000000000000000000000000000000000000000000000000e9f18c1700000000000000000000000000000000000000000000000000000000ec8067c7000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000da37f07f000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff54686520636f64652068617368206973206e6f74206b6e6f776e00000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb000000000000000000000000000000000000010400000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f496e617070726f7072696174652063616c6c65720000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5000000000000000000000000ffffffffffffffffffffffffffffffffffff00004de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c200000000000000000000000000000000000000084000000800000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe06b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f4f766572666c6f7700000000000000000000000000000000000000000000000063bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000579952fc000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0001000100000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f000000000039187a54c09fddd78293acb1d6fafb891fffc8438366fb93b8fe735877e8b717", + "deployedBytecode": "0x0005000000000002000900000000000200000000030100190000006003300270000005a80430019700040000004103550003000000010355000005a80030019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000009b0000c13d0000000002000031000000040120008c0000048b0000413d0000000301000367000000000301043b000000e003300270000005aa0430009c000000a30000a13d000005ab0430009c000000dd0000a13d000005ac0430009c000001750000213d000005af0430009c000001f20000613d000005b00130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d0000000002000411000000020100003900000002011001880000003b0000c13d0000ffff0120008c000000c80000213d000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400400043d000005ca0240009c000004c00000213d000000000101043b0000004002400039000000400020043f000000000101041a000000ff0210018f000000010320008c000007e80000213d00000000032404360000000801100270000000ff0110018f000000010210008c000007e80000213d000600000004001d000700000003001d00000000001304350000000902000029000000010220008c000007ee0000c13d000000000101004b000007ee0000c13d00000001020000390000000701000029000900000002001d00000000002104350000000801000029000005bd011001970000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000006020000290000000002020433000000010320008c0000000705000029000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000007e80000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000400100043d00000009020000290000000000210435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005d0040000410000000805000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d0000000001000416000000000101004b0000048b0000c13d000000200100003900000100001004430000012000000443000005a9010000410000169b0001042e000005b40430009c0000013d0000213d000005b80430009c000003350000613d000005b90430009c000003570000613d000005ba0130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000000010110008c0000048b0000213d000000000200041100000002010000390000000201100188000004c60000c13d000005c70120009c000004c60000413d000000400100043d0000006402100039000005ec0300004100000000003204350000004402100039000005ed030000410000000000320435000000240210003900000024030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000005b10430009c000002270000613d000005b20430009c000003e10000613d000005b30330009c0000048b0000c13d000000040220008a000005bb03000041000000200420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000000401100370000000000201043b0000000001000411000080070110008c0000048d0000c13d000005c101000041000000800010043f000900000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001130000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000004970000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c0000048b0000413d000000800300043d000000000303004b0000052d0000c13d000005be03000041000000000031043500000084032001bf00000020040000390000000000430435000000c403200039000005c5040000410000000000430435000000a4022000390000001a0300003900000000003204350000004001100210000005c6011001c70000169c00010430000005b50430009c000004280000613d000005b60130009c000004750000613d000005b70130009c0000048b0000c13d0000000001000416000000000101004b0000048b0000c13d0000000002000031000000040120008a000005bb03000041000000800410008c00000000040000190000000004034019000005bb01100197000000000501004b000000000300a019000005bb0110009c00000000010400190000000001036019000000000101004b0000048b0000c13d00000003010003670000000403100370000000000303043b000900000003001d000005bd0330009c0000048b0000213d0000006401100370000000000101043b000005bc0310009c0000048b0000213d0000000401100039169a09060000040f00000003040003670000004403400370000000000303043b0000002404400370000000000404043b000000000501001900000000060200190000000901000029000000000204001900000000040500190000000005060019169a09210000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000005ad0430009c000002ab0000613d000005ae0330009c0000048b0000c13d000000040320008a000005bb04000041000000400530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000900000003001d000005bc0330009c0000048b0000213d00000009030000290000000002320049000800000002001d000000040220008a000005bb03000041000000a00420008c00000000040000190000000004034019000005bb02200197000000000502004b000000000300a019000005bb0220009c00000000020400190000000002036019000000000202004b0000048b0000c13d0000002402100370000000000202043b000700000002001d000005bd0220009c0000048b0000213d00000000020004100000000003000411000000000223004b000005720000c13d00000009020000290000000402200039000000000121034f000000000201043b000005c101000041000000800010043f000600000002001d000000840020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800402000039169a168a0000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001c60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000001be0000413d000000000705004b000001d50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000067f0000613d0000001f01400039000000600110018f00000080021001bf000500000002001d000000400020043f000000200230008c0000048b0000413d000000800200043d000000000202004b000007bf0000c13d000005be020000410000000504000029000000000024043500000084021001bf00000020030000390000000000320435000000c402100039000005c5030000410000000000320435000000a4011000390000001a0200003900000000002104350000004001400210000005c6011001c70000169c00010430000000040320008a000005bb04000041000000200530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000e04043b000005bc04e0009c0000048b0000213d000000240f3000390000000504e002100000000004f40019000000000424004b0000048b0000213d000000090500008a0000000004000411000000000554016f000080070550008c0000051f0000c13d00000000050e004b0000057c0000c13d0000000001000416000000000101004b000004ed0000613d000007550000013d000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d00000024033000390000000801000029000700000003001d0000000001310019000000000121004b0000048b0000213d0000000201000039000000020110018800000001011002700000025e0000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000600000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000027f0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000002770000413d000000000705004b0000028e0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006a50000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000601000029169a09fc0000040f0000000002010019000600000002001d000000090100002900000007030000290000000804000029169a0a320000040f0000000601000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000800000004001d000005bc0440009c0000048b0000213d00000024043000390000000803000029000700000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000600000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000002e70000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003080000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003000000413d000000000705004b000003170000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000400000001035500000001022001900000076d0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d000000800200043d0000000501000029169a09fc0000040f0000000002010019000500000002001d0000000901000029000000060300002900000007040000290000000805000029169a0eda0000040f0000000501000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000400310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000003020003670000000401200370000000000101043b000005bd0310009c0000048b0000213d0000002402200370000000000202043b169a09fc0000040f000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000600530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000141034f000000000101043b000700000001001d000005bc0110009c0000048b0000213d00000024033000390000000701000029000600000003001d0000000001310019000000000121004b0000048b0000213d000000020100003900000002011001880000000101100270000003910000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000004690000613d000005c801000041000000800010043f0000000001000411000500000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b20000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003aa0000413d000000000705004b000003c10000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000006cb0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000005010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d000000090100002900000006030000290000000704000029169a0a320000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e0000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000900000001001d000005bd0110009c0000048b0000213d00000009010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f000000010430008c000007e80000213d00000000033204360000000801100270000000ff0110018f000000010410008c000007e80000213d00000000001304350000000002020433000000010120008c000007e80000213d0000000101000039000000000202004b000004200000c13d0000000901000029000005e70110019800000000010000190000082c0000c13d000000010110018f000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000040320008a000005bb04000041000000800530008c00000000050000190000000005044019000005bb03300197000000000603004b000000000400a019000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000002403100370000000000303043b000900000003001d0000000403100370000000000303043b000800000003001d0000004403100370000000000303043b000005bc0430009c0000048b0000213d0000002304300039000005bb05000041000000000624004b00000000060000190000000006058019000005bb07200197000005bb04400197000000000874004b0000000005008019000000000474013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000404300039000000000441034f000000000404043b000700000004001d000005bc0440009c0000048b0000213d00000024043000390000000703000029000600000004001d0000000003430019000000000223004b0000048b0000213d0000006401100370000000000101043b000500000001001d000000010110008c0000048b0000213d000000020100003900000002011001880000000101100270000004670000c13d0000000001000411000005c70110009c00000000010000190000000101004039000000000101004b000006f10000c13d000005be01000041000000800010043f0000002001000039000000840010043f0000002401000039000000a40010043f000005ed01000041000000c40010043f000005ec01000041000000e40010043f000005ee010000410000169c000104300000000001000416000000000101004b0000048b0000c13d000000040100008a0000000001100031000005bb02000041000000200310008c00000000030000190000000003024019000005bb01100197000000000401004b000000000200a019000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000004010000390000000301100367000000000101043b000005bd0210009c000004bd0000a13d00000000010000190000169c00010430000005be01000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000005e001000041000000c40010043f000005c0010000410000169c00010430000000400200043d0000001f0430018f0000000503300272000004a40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000049c0000413d000000000504004b000004b30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d000005e90320009c000004ef0000413d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000800000002001d0000000000200435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000903000029000000000232019f000000000021041b000000400100043d0000000000310435000005a8020000410000000003000414000005a80430009c0000000003028019000005a80410009c00000000010280190000004001100210000000c002300210000000000112019f000005cf011001c70000800d020000390000000203000039000005eb040000410000000805000029169a16850000040f00000001012001900000048b0000613d00000000010000190000169b0001042e0000004003200039000000400030043f0000002003200039000000000003043500000000000204350000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000400200043d000005ca0320009c000004c00000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f000000020410008c000007e80000813d00000000011204360000000803300270000000ff0330018f000000010430008c000007e80000213d00000000003104350000000003020433000000010230008c000007e80000213d000000400200043d00000000033204360000000001010433000000010410008c000007e80000213d0000000000130435000005a801000041000005a80320009c00000000010240190000004001100210000005ea011001c70000169b0001042e000005be01000041000000800010043f0000002001000039000000840010043f0000004101000039000000a40010043f000005d101000041000000c40010043f000005d201000041000000e40010043f000005d301000041000001040010043f000005d4010000410000169c000104300000000001000416000000000101004b000007400000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f00000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400400043d000000240140003900000009020000290000000000210435000005e4010000410000000000140435000000040140003900008010020000390000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000800000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000008060000613d0000000801000029000005bc0110009c000004c00000213d0000000801000029000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000080070500003900008010070000390000000906000029169a16850000040f0000000101200190000004ed0000c13d0000048b0000013d000005be01000041000000800010043f0000002001000039000000840010043f0000001501000039000000a40010043f000005bf01000041000000c40010043f000005c0010000410000169c0001043000000000053200490000008402300039000000c30550008a0000000007000019000000000600001900000005087002100000000008f80019000000000881034f000000000808043b000005bb09000041000000000a58004b000000000a000019000000000a098019000005bb0b500197000005bb0c800197000000000dbc004b0000000009008019000000000bbc013f000005bb0bb0009c00000000090ac019000000000909004b0000048b0000c13d0000000008820019000000000881034f000000000808043b0000000006680019000000000886004b000000000800001900000001080040390000000108800190000007b90000c13d00000001077000390000000008e7004b000005810000413d0000000001000416000000000161004b000007550000c13d000000c30100008a0000000001310049000200000001001d000005bd01400197000100000001001d000000000900001900050000000e001d00040000000f001d00000005019002100000000002f100190000000301000367000000000221034f000000000202043b00000002030000290000000003300031000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d0000000002f20019000800000002001d0000006002200039000700000002001d000000000121034f000000000101043b000300000001001d000005d50100004100000000001004390000000001000410000600000001001d0000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000900000009001d169a168a0000040f000000080b0000290000000909000029000000040f000029000000050e00002900000001022001900000048b0000613d000000000101043b000000000101004b0000048b0000613d000000400a00043d000005d70100004100000000001a04350000000401a00039000000400200003900000000002104350000000301b00367000000000101043b0000004402a0003900000000001204350000002001b000390000000301100367000000000101043b000005bd0210009c0000048b0000213d0000006402a0003900000000001204350000004001b000390000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b0000048b0000c13d0000008402a00039000000000012043500000007010000290000000301100367000000000101043b000000a402a00039000000000012043500000000020000310000000001b200490000008003b000390000001f0410008a0000000301000367000000000331034f000000000303043b000005bb05000041000000000643004b00000000060000190000000006058019000005bb04400197000005bb07300197000000000847004b0000000005008019000000000447013f000005bb0440009c00000000040600190000000004056019000000000404004b0000048b0000c13d0000000003b30019000000000131034f000000000101043b000005bc0410009c0000048b0000213d00000020033000390000000002120049000005bb04000041000000000523004b00000000050000190000000005042019000005bb02200197000005bb06300197000000000726004b0000000004008019000000000226013f000005bb0220009c00000000020500190000000002046019000000000202004b0000048b0000c13d000000c402a00039000000a0040000390000000000420435000000e402a0003900000000001204350000010402a0003900000003033003670000000504100272000006380000613d000000000500001900000005065002100000000007620019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b000006300000413d0000001f05100190000006470000613d0000000504400210000000000343034f00000000044200190000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000221001900000000000204350000002402a000390000000103000029000000000032043500000000020004140000000604000029000000040340008c000006780000613d0000001f01100039000000200300008a000000000131016f000005d803000041000005d80510009c0000000001038019000005a803000041000005a805a0009c00080000000a001d000000000503001900000000050a401900000040055002100000006001100210000000000151019f000005a80520009c0000000002038019000000c002200210000000000121019f000005d9011000410000000303000029000000000203004b0000066b0000613d000005da011001c700008009020000390000000005000019169a16850000040f0000066d0000013d0000000002040019169a16850000040f000400000001035500000000030100190000006003300270000105a80030019d000005a8043001970000000102200190000000050e000029000000040f0000290000000909000029000000080a000029000008e00000613d000005bc01a0009c000004c00000213d0000004000a0043f00000001099000390000000001e9004b000005a90000413d000004ed0000013d000000400200043d0000001f0430018f00000005033002720000068c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006840000413d000000000504004b0000069b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006b20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006aa0000413d000000000504004b000006c10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000006d80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000006d00000413d000000000504004b000006e70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005c801000041000000800010043f0000000001000411000400000001001d000000840010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c2011001c70000800302000039169a16850000040f00000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000007100000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000007080000413d000000000705004b0000071f0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000007930000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c0000048b0000413d00000004010000290000000902000029000000080300002900000006040000290000000705000029169a09210000040f0000000002010019000800000002001d0000000901000029000000050300002900000006040000290000000705000029169a0eda0000040f0000000801000029000005bd01100197000000400200043d0000000000120435000005a801000041000005a80320009c00000000010240190000004001100210000005c9011001c70000169b0001042e000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400100043d0000008402100039000005dd0300004100000000003204350000006402100039000005de0300004100000000003204350000004402100039000005df030000410000000000320435000000240210003900000045030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000077a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007720000413d000000000504004b000007890000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0430018f0000000503300272000007a00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000007980000413d000000000504004b000007af0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000c002100039000000400020043f00000005020000290000000000020435000000a001100039000300000001001d0000000000010435000000090100002900000024011000390000000301100367000000000101043b000400000001001d000005bd0110009c0000048b0000213d00000004010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039169a168a0000040f00000001022001900000048b0000613d000000000101043b00000005020000290000000002020433000000010320008c000007e80000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000003020000290000000002020433000000010320008c0000089e0000a13d000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000000400100043d0000008402100039000005cb0300004100000000003204350000006402100039000005cc0300004100000000003204350000004402100039000005cd030000410000000000320435000000240210003900000043030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005ce011001c70000169c00010430000000400200043d0000001f0340018f0000000504400272000008130000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000080b0000413d000000000503004b000008220000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400400043d000800000004001d000005e8010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a168a0000040f000000080a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008520000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000084a0000413d00000000090a0019000000000705004b000008620000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000008780000613d0000001f01400039000000600210018f0000000001920019000000000221004b00000000020000190000000102004039000005bc0410009c000004c00000213d0000000102200190000004c00000c13d000000400010043f000000200130008c0000048b0000413d0000000001090433000000000101004b000000000100001900000001010060390000041f0000013d000000400200043d0000001f0430018f0000000503300272000008850000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087d0000413d000000000504004b000008940000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b000000090100002900000084021000390000000301000367000000000221034f000000000202043b0000000803000029000000230330008a000005bb04000041000000000532004b00000000050000190000000005048019000005bb03300197000005bb06200197000000000736004b0000000004008019000000000336013f000005bb0330009c00000000030500190000000003046019000000000303004b0000048b0000c13d000000090300002900000000023200190000000403200039000000000131034f000000000101043b000800000001001d000005bc0110009c0000048b0000213d000000080100002900000000011000790000002404200039000005bb02000041000000000314004b00000000030000190000000003022019000005bb01100197000500000004001d000005bb04400197000000000514004b0000000002008019000000000114013f000005bb0110009c00000000010300190000000001026019000000000101004b0000048b0000c13d00000009010000290000004401100039169a0a280000040f000000000601001900000007010000290000000402000029000000060300002900000005040000290000000805000029169a13880000040f00000000010000190000169b0001042e000000400200043d0000001f0340018f0000000504400272000008ed0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000008e50000413d000000000503004b000008fc0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000001f03100039000005bb04000041000000000523004b00000000050000190000000005044019000005bb06200197000005bb03300197000000000763004b000000000400a019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b0000091f0000613d0000000303100367000000000303043b000005bc0430009c0000091f0000213d00000020011000390000000004310019000000000224004b0000091f0000213d0000000002030019000000000001042d00000000010000190000169c00010430000300000000000200000000070004140000000008450019000000000558004b00000000050000190000000105004039000005a8044001970000000105500190000009af0000c13d0000000006000031000000000586004b000009af0000413d000200000002001d000300000001001d000100000003001d0000000304400367000005ef0570009c000009bd0000813d0000000002860049000005a80220019700000000022403df000000c001700210000005f001100197000005f1011001c700000000011203af0000801002000039169a168f0000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000009cf0000613d0000003f01300039000005f202100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000005bc0520009c000009b50000213d0000000104400190000009b50000c13d000000400020043f00000000023104360000001f0430003900000005044002720000095e0000613d00000000050000310000000305500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000009560000413d000000000400004b000009600000613d0000000104000031000000000443004b000009bb0000213d00000004050003670000001f0430018f0000000503300272000009700000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000009680000413d000000000604004b0000097f0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000003040000290000000205000029000009ea0000c13d0000000002020433000000400100043d000000a003100039000000000023043500000080021000390000000000520435000000600210003900000001030000290000000000320435000005bd02400197000000400310003900000000002304350000002002100039000005f4030000410000000000320435000000a0030000390000000000310435000005f50310009c000009b50000213d000000c003100039000000400030043f000005a803000041000005a80420009c000000000203801900000040022002100000000001010433000005a80410009c00000000010380190000006001100210000000000121019f0000000002000414000005a80420009c0000000002038019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f0000000102200190000009bb0000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000009da0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000009d30000413d000000000504004b000009e80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400100043d0000004402100039000005f303000041000000000032043500000024021000390000001f030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000400300043d00000060043000390000000000240435000005bd011001970000004002300039000000000012043500000060010000390000000001130436000005f7020000410000000000210435000005f80230009c00000a200000813d0000008002300039000000400020043f000005a802000041000005a80410009c000000000102801900000040011002100000000003030433000005a80430009c00000000030280190000006003300210000000000113019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000112019f000005da011001c70000801002000039169a168a0000040f000000010220019000000a260000613d000000000101043b000005bd01100197000000000001042d000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c0001043000000000010000190000169c000104300000000301100367000000000101043b000000000201004b0000000002000019000000010200c039000000000221004b00000a300000c13d000000000001042d00000000010000190000169c000104300008000000000002000700000001001d000000000101004b00000d250000613d000300000004001d000400000003001d000000400400043d000200000002001d000005bd022001970000ffff0120008c00000d370000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000a630000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000a5b0000413d000000000705004b00000a720000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d4b0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c00000d130000213d000000010110019000000d130000c13d000000400040043f0000001f0130008c00000d110000a13d00000000010a0433000000000101004b000000040140003900000d710000c13d000005fb02000041000000000024043500000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aab0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000aa30000413d000000000705004b00000aba0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000d810000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000da70000c13d000005c1010000410000000000140435000000040140003900000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000aee0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ae60000413d000000000705004b00000afd0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0004000000010355000000010220019000000db80000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c00000d130000213d000000400040043f000000200130008c00000d110000413d00000000010a0433000000000101004b00000dde0000613d000005ca0140009c00000d130000213d0000004001400039000000400010043f0000000001040436000100000001001d000000000001043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f0000000503000029000000010220019000000d110000613d000000000101043b0000000002030433000000020320008c00000d190000813d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b00000001020000290000000002020433000000010320008c00000d190000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b00000ba70000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000100000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e680000613d0000000102000029000005bc0120009c00000d130000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e8e0000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f00000000010004160000060101100197000000000001041700000bd80000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000eb40000613d0000000502000029000005bc0120009c00000d130000213d000000400020043f0000000001000414000000040400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a804400197000000010330019000000d1f0000c13d0000000003000031000000000523004b00000d1f0000413d0000000304400367000005ef0510009c00000def0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000202000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a8033001970004000000010355000000010220019000000e010000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c00000d130000213d000000010220019000000d130000c13d000000400010043f000500000005001d00000000073504360000001f01300039000000050110027200000c170000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b00000c0f0000413d000000000100004b00000c190000613d0000000101000031000000000113004b00000d110000213d00000004020003670000001f0130018f000000050330027200000c290000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b00000c210000413d000000000401004b00000c380000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e1c0000613d0000000609000029000005bc0190009c000000050100002900000d130000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b000000040400002900000d110000c13d0000000002040433000005bc0320009c00000d110000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b00000d110000c13d0000000023020434000005bc0430009c00000d130000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c00000d130000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b00000d110000213d000000000432004b00000cb70000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b00000d110000c13d000000400500043d000005ca0650009c00000d130000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b00000c9c0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000606000029000000010220019000000d110000613d000000000101043b000000000101004b00000d110000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b00000ce30000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b00000cd90000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a8043001970004000000010355000000010220019000000e420000613d0000000602000029000005bc0120009c000000000102001900000d130000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f000000010120019000000d110000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d580000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d500000413d000000000504004b00000d670000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fa030000410000000000320435000000240240003900000015030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000d8e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d860000413d000000000504004b00000d9d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fc020000410000000000210435000000240140003900000013020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f000000050330027200000dc50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000dbd0000413d000000000504004b00000dd40000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f000000050230027200000e0c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000e050000413d000000000504004b00000e1a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f000000050440027200000e290000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e210000413d000000000503004b00000e380000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e4f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e470000413d000000000503004b00000e5e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e750000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e6d0000413d000000000503004b00000e840000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000e9b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000e930000413d000000000503004b00000eaa0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f000000050440027200000ec10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000eb90000413d000000000503004b00000ed00000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300008000000000002000300000005001d000700000001001d000000000101004b000011d30000613d000400000003001d000200000004001d000000400400043d000100000002001d000005bd022001970000ffff0120008c000011e50000a13d000005f90100004100000000001404350000000401400039000800000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039000600000002001d000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f0c0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f040000413d000000000705004b00000f1b0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000011f90000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000005bc0240009c000011c10000213d0000000101100190000011c10000c13d000000400040043f0000001f0130008c000011bf0000a13d00000000010a0433000000000101004b0000121f0000c13d000005fb010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800302000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f540000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f4c0000413d000000000705004b00000f630000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012300000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000000401400039000012560000c13d000005c102000041000000000024043500000007020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800402000039000500000004001d169a168a0000040f000000050a00002900000000030100190000006003300270000005a803300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000f970000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000f8f0000413d000000000705004b00000fa60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00040000000103550000000102200190000012660000613d0000001f01400039000000600110018f0000000004a10019000005bc0140009c000011c10000213d000000400040043f000000200130008c000011bf0000413d00000000010a0433000000000101004b0000128c0000613d000005ca0140009c000011c10000213d0000004001400039000000400010043f000000000304043600000000000304350000000402000029000000020120008c000011c70000813d0000000000240435000400000003001d000000000003043500000008010000290000000000100435000000200000043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005c3011001c70000801002000039000500000004001d169a168a0000040f00000005030000290000000102200190000011bf0000613d000000000101043b0000000002030433000000010320008c0000000405000029000011c70000213d000000000301041a000001000400008a000000000343016f000000000223019f000000000021041b0000000002050433000000010320008c000011c70000213d000000000301041a000005c404000041000000000343016f00000008022002100000ff000220018f000000000223019f000000000021041b0000000001000416000005d5020000410000000000200439000000000101004b000010550000613d0000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039000500000002001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000002401400039000000080200002900000000002104350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000400000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013160000613d0000000402000029000005bc0120009c000011c10000213d000000400020043f000005d501000041000000000010043900000005020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000133c0000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f000000000100041600000601011001970000000000010417000010860000013d00000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d000005fe0100004100000000001404350000000401400039000000080200002900000000002104350000000701000029000005ff0110019700000600011001c700000024024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000013620000613d0000000502000029000005bc0120009c000011c10000213d000000400020043f0000000001000414000000020400002900000003030000290000000002430019000000000332004b00000000030000190000000103004039000005a8044001970000000103300190000011cd0000c13d0000000003000031000000000523004b000011cd0000413d0000000304400367000005ef0510009c0000129d0000813d00000000050004110000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af000300000005001d000005bd0d5001970000000102000029169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000012af0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000011c10000213d0000000102200190000011c10000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000010c50000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b000010bd0000413d000000000100004b000010c70000613d0000000101000031000000000113004b000011bf0000213d00000004020003670000001f0130018f0000000503300272000010d70000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000010cf0000413d000000000401004b000010e60000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000006020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400400043d00000603010000410000000000140435000000040140003900000008020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012ca0000613d0000000609000029000005bc0190009c0000000501000029000011c10000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000011bf0000c13d0000000002040433000005bc0320009c000011bf0000213d000000000141001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000011bf0000c13d0000000023020434000005bc0430009c000011c10000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004940019000005bc0540009c000011c10000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000011bf0000213d000000000432004b000011650000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000011bf0000c13d000000400500043d000005ca0650009c000011c10000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b0000114a0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000011bf0000613d000000000101043b000000000101004b000011bf0000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000080200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000011910000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000011870000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000600000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000012f00000613d0000000602000029000005bc0120009c0000000001020019000011c10000213d000000400010043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000030500002900000007060000290000000807000029169a16850000040f0000000101200190000011bf0000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000002101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400100043d00000044021000390000060703000041000000000032043500000024021000390000001b030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c00010430000000640140003900000605020000410000000000210435000000440140003900000606020000410000000000210435000000240140003900000028020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011fe0000413d000000000504004b000012150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005fa020000410000000000210435000000240140003900000015020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f00000005033002720000123d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012350000413d000000000504004b0000124c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004402400039000005fc030000410000000000320435000000240240003900000013030000390000000000320435000005be02000041000000000024043500000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400200043d0000001f0430018f0000000503300272000012730000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000126b0000413d000000000504004b000012820000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300000004401400039000005c502000041000000000021043500000024014000390000001a020000390000000000210435000005be010000410000000000140435000000040140003900000020020000390000000000210435000005a801000041000005a80240009c00000000010440190000004001100210000005c6011001c70000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000012ba0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000012b30000413d000000000504004b000012c80000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000012d70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012cf0000413d000000000503004b000012e60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000012fd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000012f50000413d000000000503004b0000130c0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013230000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000131b0000413d000000000503004b000013320000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000013490000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013410000413d000000000503004b000013580000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000136f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000013670000413d000000000503004b0000137e0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c000104300009000000000002000500000005001d000700000003001d000800000002001d000600000001001d0000000002000416000000000106004b0000152f0000613d000300000004001d000400000002001d000000000102004b000013cb0000613d000005d50100004100000000001004390000800a010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000005fd0100004100000000001404350000004401400039000000000200041600000000002104350000000801000029000005bd01100197000000240240003900000000001204350000000001000410000005bd0110019700000004024000390000000000120435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000900000004001d00000000010440190000004001100210000000c002200210000000000112019f000005c6011001c70000800a02000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000016240000613d0000000902000029000005bc0120009c000015790000213d000000400020043f000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d0000000701000029000005ff0110019700000600011001c7000000400400043d00000024024000390000000000120435000005fe0100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000200000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039000100000002001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015850000613d0000000202000029000005bc0120009c0000000401000029000015790000213d000000400020043f000000000101004b000014070000613d0000000001000416000006010110019700000000000104170000000001000414000000030400002900000005030000290000000002430019000000000332004b00000000030000190000000103004039000005a80440019700000001033001900000157f0000c13d0000000003000031000000000523004b0000157f0000413d0000000304400367000005ef0510009c000015ab0000813d0000000002230049000005a80220019700000000022403df000000c001100210000005f00110019700000602011001c700000000011203af0000000602000029000005bd0d200197000000080200002900080000000d001d169a16940000040f00000000030100190000006003300270000105a80030019d000005a80330019700040000000103550000000102200190000015bd0000613d0000003f01300039000005f201100197000000400500043d0000000001150019000000000251004b00000000020000190000000102004039000005bc0410009c000015790000213d0000000102200190000015790000c13d000000400010043f000500000005001d00000000073504360000001f013000390000000501100272000014460000613d00000000020000310000000302200367000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000514004b0000143e0000413d000000000100004b000014480000613d0000000101000031000000000113004b000015770000213d00000004020003670000001f0130018f0000000503300272000014580000613d000000000400001900000005054002100000000006570019000000000552034f000000000505043b00000000005604350000000104400039000000000534004b000014500000413d000000000401004b000014670000613d0000000503300210000000000232034f00000000033700190000000301100210000000000403043300000000041401cf000000000414022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000141019f0000000000130435000005d501000041000000000010043900000001020000290000000400200443000005a8010000410000000004000414000005a80340009c0000000001044019000000c001100210000005d6011001c7000400000007001d169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d00000603010000410000000000140435000000040140003900000009020000290000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000600000004001d00000000010440190000004001100210000000c002200210000000000112019f000005dc011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015d80000613d0000000609000029000005bc0190009c0000000501000029000015790000213d000000400090043f0000000001010433000005bb02000041000000200310008c00000000030000190000000003024019000005bb04100197000000000504004b000000000200a019000005bb0440009c000000000203c019000000000202004b0000000404000029000015770000c13d0000000002040433000005bc0320009c000015770000213d000000000114001900000000024200190000001f03200039000005bb04000041000000000513004b00000000050000190000000005048019000005bb03300197000005bb06100197000000000763004b0000000004008019000000000363013f000005bb0330009c00000000030500190000000003046019000000000303004b000015770000c13d0000000023020434000005bc0430009c000015790000213d00000005043002100000003f04400039000000200500008a000000000454016f0000000004490019000005bc0540009c000015790000213d000000400040043f000000000039043500000006033002100000000003230019000000000413004b000015770000213d000000000432004b000014e60000813d00000000040900190000000005210049000005bb06000041000000400750008c00000000070000190000000007064019000005bb05500197000000000805004b000000000600a019000005bb0550009c00000000050700190000000005066019000000000505004b000015770000c13d000000400500043d000005ca0650009c000015790000213d00000020044000390000004006500039000000400060043f000000007602043400000000066504360000000007070433000000000076043500000000005404350000004002200039000000000532004b000014cb0000413d000005d501000041000000000010043900008005010000390000000400100443000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005d6011001c70000800202000039169a168a0000040f00000006060000290000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400700043d000000240170003900000040020000390000000000210435000006040100004100000000001704350000000401700039000000090200002900000000002104350000000001060433000000440270003900000000001204350000006402700039000000000301004b000015120000613d000000000300001900000020066000390000000004060433000000005404043400000000044204360000000005050433000000000054043500000040022000390000000103300039000000000413004b000015080000413d0000000001720049000005a802000041000005a80370009c000000000302001900000000030740190000004003300210000005a80410009c00000000010280190000006001100210000000000131019f0000000003000414000005a80430009c0000000002034019000000c002200210000000000121019f0000800502000039000500000007001d169a16850000040f00000000030100190000006003300270000105a80030019d000005a80430019700040000000103550000000102200190000015fe0000613d0000000502000029000005bc0120009c000015660000a13d000015790000013d000000000102004b0000164a0000c13d000005d501000041000000000010043900008002020000390000000400200443000005a8010000410000000003000414000005a80430009c0000000001034019000000c001100210000005d6011001c7169a168a0000040f0000000102200190000015770000613d000000000101043b000000000101004b000015770000613d000000400400043d000000240140003900000007020000290000000000210435000005e40100004100000000001404350000000801000029000005bd021001970000000401400039000900000002001d0000000000210435000005a8010000410000000002000414000005a80320009c0000000002018019000005a80340009c000500000004001d00000000010440190000004001100210000000c002200210000000000112019f000005e5011001c70000800202000039169a16850000040f00000000030100190000006003300270000105a80030019d000005a804300197000400000001035500000001022001900000165f0000613d0000000502000029000005bc0120009c000015790000213d0000000601000029000005bd01100197000800000001001d000000400020043f000005a8010000410000000002000414000005a80320009c0000000001024019000000c001100210000005da011001c70000800d020000390000000403000039000005e604000041000000080500002900000007060000290000000907000029169a16850000040f0000000101200190000015770000613d000000000001042d00000000010000190000169c00010430000005db0100004100000000001004350000004101000039000000040010043f000005dc010000410000169c00010430000005db0100004100000000001004350000001101000039000000040010043f000005dc010000410000169c00010430000000400200043d0000001f0340018f0000000504400272000015920000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000158a0000413d000000000503004b000015a10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000004402100039000005f6030000410000000000320435000000240210003900000008030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005c6011001c70000169c000104300000001f0430018f0000000502300272000015c80000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015c10000413d000000000504004b000015d60000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000012043500000060013002100000169c00010430000000400200043d0000001f0340018f0000000504400272000015e50000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015dd0000413d000000000503004b000015f40000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f00000005044002720000160b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016030000413d000000000503004b0000161a0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400200043d0000001f0340018f0000000504400272000016310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016290000413d000000000503004b000016400000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c00010430000000400100043d0000006402100039000005e10300004100000000003204350000004402100039000005e2030000410000000000320435000000240210003900000038030000390000000000320435000005be020000410000000000210435000000040210003900000020030000390000000000320435000005a802000041000005a80310009c00000000010280190000004001100210000005e3011001c70000169c00010430000000400200043d0000001f0340018f00000005044002720000166c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000016640000413d000000000503004b0000167b0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000005a8010000410000000103000031000005a80430009c0000000003018019000005a80420009c000000000102401900000040011002100000006002300210000000000112019f0000169c0001043000001688002104210000000102000039000000000001042d0000000002000019000000000001042d0000168d002104230000000102000039000000000001042d0000000002000019000000000001042d00001692002104230000000102000039000000000001042d0000000002000019000000000001042d000000000f0d001900001698002104290000000102000039000000000001042d0000000002000019000000000001042d0000169a000004320000169b0001042e0000169c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000009c4d535a00000000000000000000000000000000000000000000000000000000e9f18c1600000000000000000000000000000000000000000000000000000000ecf95b8900000000000000000000000000000000000000000000000000000000ecf95b8a00000000000000000000000000000000000000000000000000000000f3385fb600000000000000000000000000000000000000000000000000000000e9f18c1700000000000000000000000000000000000000000000000000000000ec8067c7000000000000000000000000000000000000000000000000000000009c4d535b00000000000000000000000000000000000000000000000000000000bb0fd61000000000000000000000000000000000000000000000000000000000da37f07f000000000000000000000000000000000000000000000000000000005d3826ff000000000000000000000000000000000000000000000000000000005d382700000000000000000000000000000000000000000000000000000000007b510fe80000000000000000000000000000000000000000000000000000000084da1fb400000000000000000000000000000000000000000000000000000000187598a5000000000000000000000000000000000000000000000000000000003cda335100000000000000000000000000000000000000000000000000000000571809818000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff08c379a00000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792073656c66000000000000000000000000000000000000000000000000000000000000640000008000000000000000004c6314f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000040000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff54686520636f64652068617368206973206e6f74206b6e6f776e00000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000000010000306395c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf696e6700000000000000000000000000000000000000000000000000000000006f6d2073657175656e7469616c20746f20617262697472617279206f726465724974206973206f6e6c7920706f737369626c6520746f206368616e676520667200000000000000000000000000000000000000a40000000000000000000000000200000000000000000000000000000000000020000000000000000000000000c7544194dab38b1652f35439b9b4806d8b71e113f2cf5c1351cb2ecf7c83959a43616e206f6e6c792062652063616c6c656420627920464f5243455f4445504c4f594552206f7220434f4d504c45585f55504752414445525f434f4e54524143540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000f3385fb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffefb000000000000000000000000000000000000010400000000000000000000000002000000000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000006d656e74730000000000000000000000000000000000000000000000000000002074686520636f6d62696e6564206076616c75656073206f66206465706c6f796076616c7565602070726f7669646564206973206e6f7420657175616c20746f496e617070726f7072696174652063616c6c65720000000000000000000000006e6f742063616c6c2074686520636f6e7374727563746f7200000000000000005468652076616c7565206d757374206265207a65726f20696620776520646f2000000000000000000000000000000000000000840000000000000000000000000d4651aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000290afdae231a3fc0bbae8b1af63698b0a1d79b21ad17df0342dfb952fe74f8e5000000000000000000000000ffffffffffffffffffffffffffffffffffff00004de2e46800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000400000000000000000000000003fb6f4f15ddd4a75588ca934894ad2cdcab25a5012e2515e1783433d0128611a666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c200000000000000000000000000000000000000084000000800000000000000000000000000000000000000000000000000000000000000000000000010000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe06b656363616b3235362072657475726e656420696e76616c69642064617461002020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494000000000000000000000000000000000000000000000000ffffffffffffff3f4f766572666c6f7700000000000000000000000000000000000000000000000063bae3a9951d38e8a3fbb7b70909afc1200610fc5bc55ade242f815974674f23000000000000000000000000000000000000000000000000ffffffffffffff80e03fe17700000000000000000000000000000000000000000000000000000000436f64652068617368206973206e6f6e2d7a65726f00000000000000000000005aa9b6b5000000000000000000000000000000000000000000000000000000004163636f756e74206973206f6363757069656400000000000000000000000000579952fc000000000000000000000000000000000000000000000000000000004f1e1be000000000000000000000000000000000000000000000000000000000ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0001000100000000000000000000000000000000000000000000000000000000c2e4ff9700000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000656c20737061636500000000000000000000000000000000000000000000000043616e206e6f74206465706c6f7920636f6e74726163747320696e206b65726e42797465636f6465486173682063616e6e6f74206265207a65726f000000000039187a54c09fddd78293acb1d6fafb891fffc8438366fb93b8fe735877e8b717", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/DefaultAccount.json b/src/deps/contracts/DefaultAccount.json index 6ab12283..fec43b83 100644 --- a/src/deps/contracts/DefaultAccount.json +++ b/src/deps/contracts/DefaultAccount.json @@ -533,8 +533,8 @@ "type": "receive" } ], - "bytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005ff0430019700030000004103550002000000010355000005ff0030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000006010430009c000000450000a13d000006020430009c000000a90000613d000006030430009c000000ea0000613d000006040330009c000000a60000c13d000000040220008a0000060703000041000000200420008c000000000400001900000000040340190000060705200197000000000605004b000000000300a019000006070550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000006080310009c0000010d0000213d00000000011200490000060702000041000002600310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d0000002001000039000001000010044300000120000004430000060001000041000017f80001042e000000000102004b000000a60000c13d0000000001000019000017f80001042e000006050430009c000000eb0000613d000006060330009c000000a60000c13d000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000006080430009c0000010d0000213d000000040530003900000000045200490000060706000041000002600740008c000000000700001900000000070640190000060704400197000000000804004b000000000600a019000006070440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d000000000400041200000609064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b0000060708000041000000000976004b000000000900001900000000090880190000060707700197000006070a600197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000006080760009c0000010d0000213d000000000762004900000020025000390000060708000041000000000972004b000000000900001900000000090820190000060707700197000006070a200197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000061501000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062d01000041000000c40010043f0000062e01000041000000e40010043f0000062c01000041000017f90001043017f717aa0000040f0000000001000019000017f80001042e000000040320008a0000060704000041000000600630008c000000000600001900000000060440190000060703300197000000000703004b000000000400a019000006070330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000006080370009c0000010d0000213d000000040670003900000000036200490000060704000041000002600830008c000000000800001900000000080440190000060703300197000000000903004b000000000400a019000006070330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d000000000300041200000609033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b0000060904400197000000000303043b0000060a0830009c000001310000413d00000044015000390000061402000041000000000021043500000024015000390000000802000039000000000021043500000615010000410000000000150435000000040150003900000020020000390000000000210435000005ff01000041000005ff0250009c0000000001054019000000400110021000000616011001c7000017f90001043017f716020000040f000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000006080330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d00000000023200490000060703000041000002600420008c000000000400001900000000040340190000060702200197000000000502004b000000000300a019000006070220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017f9000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d000000000100041200000609011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d00000020031000390000062f0400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006300310009c0000015e0000413d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f900010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b0000060708000041000000000975004b000000000900001900000000090880190000060707700197000006070a500197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000006080160009c0000010d0000213d000000000162004900000020025000390000060705000041000000000712004b0000000007000019000000000705201900000607011001970000060708200197000000000918004b0000000005008019000000000118013f000006070110009c00000000010700190000000001056019000000000101004b0000010d0000c13d00000000010004140000060b0510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f00000000040104330000060b0540009c000001740000413d00000615020000410000000000230435000000a40210003900000614040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005ff01000041000005ff0230009c0000000001034019000000400110021000000616011001c7000017f900010430000000c0022002100000061102200197000000400110021000000631011000410000063201100197000000000112019f00000060024002100000063302200197000000000121019f00000634011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917f717e30000040f00030000000103550000006001100270000105ff0010019d000005ff041001970000003f014000390000063505100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000006080630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012a20000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002a30000c13d0000000702000029000000000121034f000000000101043b000000800210008c0000031e0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000090200002900000021022000390000000000120435000004760000013d000000000221034f000000000202043b0000060c02200197000006170720009c0000026e0000c13d000000430260008c000002850000213d0000061501000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062a01000041000000c40010043f0000062b01000041000000e40010043f0000062c01000041000017f9000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060c088001970000060d0980009c0000024a0000613d0000060e0980009c0000024a0000613d0000060f0980009c0000024a0000613d000006100580009c00000000050000190000000105006039000000010550018f0000000008260019000005ff02200197000000000227034f000000000703004b0000027a0000c13d000000000368004b0000027f0000413d0000000003000031000000000683004b0000027f0000413d00000612060000410000061307000041000000000505004b00000000050600190000000005076019000000c0011002100000061101100197000000000115019f0000000003830049000005ff0330019700000000023203df00000000011203af000000000204001917f717ed0000040f000002fc0000013d0000000001010433000005ff02000041000005ff0410009c0000000001028019000005ff0430009c000000000203401900000040022002100000006001100210000000000121019f000017f900010430000006180120009c000000430000613d0000061501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000061901000041000000c40010043f0000061a01000041000017f900010430000000000668004b0000027f0000413d0000000006000031000000000786004b000002f20000813d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f9000104300000002402500039000000000221034f000000000202043b000b00000002001d000006090220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061b02000041000000800020043f0000060902400197000800000002001d000000840020043f0000060901100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c000003970000c13d0000000103000031000000200130008c00000020040000390000000004034019000003c30000013d000000710320008c0000033b0000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d00000000044200190000060705000041000000000643004b0000000006000019000000000605801900000607044001970000060707300197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000006080410009c0000010d0000213d000000000212004900000020033000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d00000000020004140000000004310019000000000114004b00000000010000190000000101004039000005ff0330019700000001011001900000027f0000c13d0000000001000031000000000541004b0000027f0000413d00000002033003670000060b0520009c000007da0000413d000000400100043d00000044021000390000061403000041000000000032043500000024021000390000000803000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f9000104300000000006860049000005ff0660019700000000026203df000000c001100210000006110110019700000612011001c700000000011203af0000800902000039000000000600001917f717ed0000040f000300000001035500000000030100190000006003300270000105ff0030019d000005ff033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000030e0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003070000413d000000000504004b0000031c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400200043d000900000002001d000006390220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000032a0000413d00000009030000290000000003030433000000000303004b0000046d0000c13d0000064b0100004100000000001004350000003201000039000000040010043f0000064c01000041000017f900010430000000020120008c000003eb0000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005b10000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000003840000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000037c0000413d000000000500004b000003860000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005ce0000013d000005ff02000041000005ff0310009c0000000001028019000000c0011002100000061c011001c70000000b0200002917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b00000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bf0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004470000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a0024000390000061d030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061e03000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c000005470000c13d00000001020000390000000101000031000005580000013d000000010120008c000004c70000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006430000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004340000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000042c0000413d000000000500004b000004360000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006600000013d000000400200043d0000001f0430018f0000000503300272000004540000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000044c0000413d000000000504004b000004630000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004d90000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004b40000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004ac0000413d000000000500004b000004b60000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004f60000013d000000400100043d00000044021000390000063603000041000000000032043500000024021000390000001703000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004e30000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006b00000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000005340000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000052c0000413d000000000600004b000005360000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006cd0000013d000005ff04000041000005ff0530009c000000000304801900000060033002100000004002200210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000700000003001d000000000301004b000005810000c13d00000007010000290000000031010434000200000003001d000000000202004b0000061e0000c13d000000000201004b000007610000c13d000000400400043d000b00000004001d0000061501000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005a10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000005990000413d000000000604004b0000055c0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000055c0000013d000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005bb0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c0000076c0000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000060b0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006030000413d000000000600004b0000060d0000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000007890000013d000000000201004b00000a360000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a320000c13d000000400100043d00000044021000390000062903000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000064d0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009c40000413d00000080032002700000063b0420009c000000000302a0190000063b0420009c0000000004000019000000100400203900000008054001bf000006080630009c00000000040520190000004005300270000006080630009c000000000305201900000004054001bf000005ff0630009c00000000040520190000002005300270000005ff0630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005530436000000210640003900000005066002720000069d0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006950000413d000000000600004b0000069f0000613d0000000006030433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009e10000013d000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006ba0000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006db0000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006d40000413d000000000143001900000000000104350000000004020433000000000504004b000006e80000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006e10000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000006080220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f000006390110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f00000020025000390000063d0300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bd20000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000005040000290000000003340436000000210420003900000005044002720000074c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007440000413d000000000400004b0000074e0000613d00000005040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000bf20000013d000005ff020000410000000204000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000007760000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a730000413d00000080043002700000063b0530009c000000000403a0190000063b0530009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007c70000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007bf0000413d000000000700004b000007c90000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a900000013d0000000001410049000005ff0110019700000000011303df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff033001970003000000010355000000010220019000000ae10000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008050000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007fd0000413d000000000400004b000008070000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008170000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b0000080f0000413d000000000604004b000008260000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b0000060706000041000000000753004b0000000007000019000000000706801900000607055001970000060708300197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000006080350009c0000010d0000213d0000000503500210000000000434004900000020061000390000060701000041000000000746004b0000000007000019000000000701201900000607044001970000060708600197000000000948004b0000000001008019000000000448013f000006070440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d00000020041000390000064205500198000008650000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b0000085d0000413d000000000200004b000008670000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000006080520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005ff02000041000005ff0340009c0000000003020019000000000304401900000040033002100000000001010433000005ff0410009c00000000010280190000006001100210000000000131019f0000000003000414000005ff0430009c0000000002034019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b0000060706000041000000000754004b0000000007000019000000000706801900000607055001970000060708400197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000006080310009c0000010d0000213d000000000212004900000020034000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005ff043001970000027f0000413d0000000003000031000000000513004b0000027f0000413d0000000204400367000005ff0520009c000002e00000213d0000000001130049000005ff0110019700000000011403df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff0330019700030000000103550000000102200190000014500000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008eb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008e30000413d000000000400004b000008ed0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008fd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008f50000413d000000000604004b0000090c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000644030000410000000000320435000001c0030000390000000000310435000006450310009c0000012b0000213d000001e003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b000006460300004100000000003204350000008003400039000000000013043500000060014000390000064703000041000000000031043500000040014000390000064803000041000000000031043500000080010000390000000000140435000006490140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005ff01000041000005ff0320009c000000000201801900000040022002100000000003040433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064a0400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000006250310009c0000012b0000213d0000008003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400300043d000006390430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009ce0000413d0000000005030433000000000505004b000003350000613d000000f8052002100000060706000041000000000202004b0000000002050019000000000206601900000000050404330000063a05500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b640000413d00000080042002700000063b0520009c000000000402a0190000063b0520009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a1f0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a170000413d000000000700004b00000a210000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b810000013d00000007010000290000000001010433000000000201004b00000a600000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a600000c13d000000400100043d00000064021000390000062703000041000000000032043500000044021000390000062803000041000000000032043500000024021000390000002a03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400300043d0000002401300039000000090200002900000000002104350000061b010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000afc0000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b2f0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a7d0000413d0000000006040433000000000606004b000003350000613d000000f8063002100000060707000041000000000303004b0000000003060019000000000307601900000000060504330000063a06600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c670000413d00000080053002700000063b0630009c000000000503a0190000063b0630009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ace0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000ac60000413d000000000800004b00000ad00000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c840000013d0000001f0430018f000000050230027200000aec0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ae50000413d000000000504004b00000afa0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000005ff02000041000005ff0310009c00000000010280190000000704000029000005ff0340009c00000000020440190000004002200210000000c001100210000000000121019f00000621011001c70000000b0200002917f717e80000040f000000070a00002900000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b1b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b130000413d000000000705004b00000b2b0000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c410000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000006080410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000cd50000c13d00000044021000390000000a03000029000000000032043500000020021000390000061d03000041000000000032043500000024031000390000000904000029000000000043043500000003030000290000000000310435000006250310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f000006260310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061e03000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000df70000c13d0000000102000039000000010100003100000e0a0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b6e0000413d0000000006040433000000000606004b000003350000613d000000f8062002100000060707000041000000000202004b0000000002060019000000000207601900000000060504330000063a06600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cfb0000413d00000080052002700000063b0620009c000000000502a0190000063b0620009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bbf0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bb70000413d000000000800004b00000bc10000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d180000013d000000400200043d000500000002001d000006390220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bde0000413d00000005030000290000000003030433000000000303004b000003350000613d000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d00000000044300190000060705000041000000000641004b0000000006000019000000000605801900000607044001970000060707100197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000006080510009c0000010d0000213d000000000513004900000020034000390000060704000041000000000653004b0000000006000019000000000604201900000607055001970000060707300197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f320000c13d000000000132034f000000000101043b000000010200008a0000060703000041000000000221004b000000000200001900000000020320190000060701100197000006070410009c00000000030080190000060701100167000006070110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010900000c13d000000400100043d000400000001001d000006390110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063c02000041000000000021043500000001010000390000000000130435000010900000013d000000400200043d0000001f0430018f000000050330027200000c4e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c460000413d000000000504004b00000c5d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c710000413d0000000007050433000000000707004b000003350000613d000000f8073002100000060708000041000000000303004b0000000003070019000000000308601900000000070604330000063a07700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d790000413d00000080063002700000063b0730009c000000000603a0190000063b0730009c0000000007000019000000100700203900000008087001bf000006080960009c00000000070820190000004008600270000006080960009c000000000608201900000004087001bf000005ff0960009c00000000070820190000002008600270000005ff0960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000006080a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cc20000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cba0000413d000000000900004b00000cc40000613d0000000009060433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063c0990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d960000013d00000064021000390000062203000041000000000032043500000044021000390000062303000041000000000032043500000024021000390000003603000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001f03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000d050000413d0000000007050433000000000707004b000003350000613d000000f8072002100000060708000041000000000202004b0000000002070019000000000208601900000000070604330000063a07700197000000000227019f0000000000260435000000400600043d000006390260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f00000020076000390000063d0800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e630000413d00000080072002700000063b0820009c000000000702a0190000063b0820009c0000000008000019000000100800203900000008098001bf000006080a70009c00000000080920190000004009700270000006080a70009c000000000709201900000004098001bf000005ff0a70009c00000000080920190000002009700270000005ff0a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000006080b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d660000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d5e0000413d000000000a00004b00000d680000613d000000000a070433000000000a0a004b000003350000613d000000000a0904330000063a0aa00197000000f80b800210000000000aab019f0000063c0aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e800000013d000000400600043d000006390760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d830000413d0000000008060433000000000808004b000003350000613d000000f8083002100000060709000041000000000303004b0000000003080019000000000309601900000000080704330000063a08800197000000000338019f0000000000370435000000400700043d000006390370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f00000020087000390000063d090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f950000413d00000080083002700000063b0930009c000000000803a0190000063b0930009c00000000090000190000001009002039000000080a9001bf000006080b80009c00000000090a2019000000400a800270000006080b80009c00000000080a2019000000040a9001bf000005ff0b80009c00000000090a2019000000200a800270000005ff0b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000006080ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000de40000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000ddc0000413d000000000b00004b00000de60000613d000000000b080433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c900210000000000bbc019f0000063c0bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fb20000013d000005ff04000041000005ff0520009c00000000020480190000004002200210000005ff0530009c00000000030480190000006003300210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000900000003001d000000000301004b00000e330000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f680000c13d000000000201004b0000115f0000c13d000000400400043d000b00000004001d000006150100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e530000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e4b0000413d000000000604004b00000e0e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e0e0000013d000000400700043d000006390870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e6d0000413d0000000009070433000000000909004b000003350000613d000000f809200210000006070a000041000000000202004b000000000209001900000000020a601900000000090804330000063a09900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e8d0000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e860000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e9c0000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e950000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000eab0000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000ea40000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eba0000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000eb30000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ec90000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000ec20000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ed80000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ed10000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000006080450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012c60000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013440000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013440000013d000000380210008c000010730000413d0000002002100270000005ff0310009c00000000030100190000000003022019000005ff0210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000006390440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f500000413d00000004040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063e044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010900000013d000000000201004b00000f7f0000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006310000613d00000009010000290000000001010433000000000201004b000000430000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a4b0000613d000000430000013d000000400800043d000006390980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f9f0000413d000000000a080433000000000a0a004b000003350000613d000000f80a300210000006070b000041000000000303004b00000000030a001900000000030b6019000000000a0904330000063a0aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fbf0000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fb80000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fce0000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fc70000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fdd0000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fd60000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fec0000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fe50000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ffb0000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000ff40000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b0000100a0000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b000010030000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b000010190000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010120000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000006080450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012f80000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013d70000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013d70000013d000000400200043d000400000002001d000006390220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000107f0000413d00000004030000290000000003030433000000000303004b000003350000613d000000f80110021000000000030204330000063a03300197000000000113019f0000060701100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000011050000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b0000060704000041000000000659004b0000000006000019000000000604801900000607055001970000060707900197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000006080a20009c0000010d0000213d00000000032300490000002009900039000006070a000041000000000b39004b000000000b000019000000000b0a201900000607033001970000060709900197000000000c39004b000000000a008019000000000339013f000006070330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000060802200197000000380320008c000011a70000413d0000002003200270000005ff0420009c00000000040200190000000004032019000005ff0320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d000006390560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010ef0000413d0000000005060433000000000505004b000003350000613d00000000050404330000063a05500197000000f807300210000000000557019f00000640055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011c10000013d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000800210008c0000116a0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004420436000000210530003900000005055002720000114c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000011440000413d000000000500004b0000114e0000613d0000000005020433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c000000000100201900000021032000390000000000130435000011870000013d000005ff020000410000000704000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000011740000413d0000000004020433000000000404004b000003350000613d000000f8041002100000060705000041000000000101004b0000000001040019000000000105601900000000040304330000063a04400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b000011940000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b0000118d0000413d00000000024300190000064d0400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000006080420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f0000000202000367000010980000013d000000400600043d000006390360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011b10000413d0000000004060433000000000404004b000003350000613d000000f80220021000000000040304330000063a04400197000000000242019f0000063f02200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b0000060707000041000000000854004b0000000008000019000000000807801900000607055001970000060709400197000000000a59004b0000000007008019000000000559013f000006070550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000006080340009c0000010d0000213d000000000242004900000020055000390000060703000041000000000725004b0000000007000019000000000703201900000607022001970000060708500197000000000928004b0000000003008019000000000228013f000006070220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011f90000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011f20000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b0000120a0000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012020000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b0000121b0000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012130000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b0000122c0000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012240000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b0000123d0000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012350000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b0000124e0000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012460000413d0000000008870019000000000008043500000000066700190000001f0740018f0000002008600039000000020550036700000005094002720000125f0000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000012570000413d000000000a07004b0000126e0000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b0000127c0000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b000012750000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005ff01000041000005ff0430009c000000000301801900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000a0100002917f717c10000040f0000064e02000041000000000020043900000008020000290000000400200443000800000001001d0000800a01000039000000240200003917f715f10000040f0000000802000029000000000112004b0000000001000019000000010100a03917f7167d0000040f0000000b01000029000001e4021000390000000a0100002917f716950000040f000000000300003117f716c10000040f0000000002010019000000090100002917f716fc0000040f0000064f02000041000000000101004b00000000010200190000000001006019000000400200043d0000000000120435000005ff01000041000005ff0320009c0000000001024019000000400110021000000650011001c7000017f80001042e000000380760008c0000132a0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000012e10000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013440000013d000000380760008c000013bd0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013130000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013d70000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013330000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000134e0000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000146b0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000013a70000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000014840000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013c60000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013e10000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000152e0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000143a0000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015470000013d0000001f0430018f00000005023002720000145b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014540000413d000000000504004b000014690000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000014740000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000006070a000041000000000b83004b000000000b000019000000000b0a80190000060708800197000006070c300197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020093000390000060703000041000000000a49004b000000000a000019000000000a0320190000060704400197000006070b900197000000000c4b004b000000000300801900000000044b013f000006070440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d0000002004300039000006340a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000014bc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000014b50000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000014cb0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000014c40000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b000014da0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000014d30000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a800272000014eb0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000014e30000413d000000000b06004b000014fa0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000015080000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015010000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000006080510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005ff01000041000005ff0240009c0000000002010019000000000204401900000040022002100000000003030433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015370000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000006070a000041000000000b82004b000000000b000019000000000b0a80190000060708800197000006070c200197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020092000390000060702000041000000000a49004b000000000a000019000000000a0220190000060704400197000006070b900197000000000c4b004b000000000200801900000000044b013f000006070440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006410a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b0000157f0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015780000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b0000158e0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000015870000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b0000159d0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000015960000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000015ae0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000015a60000413d000000000b06004b000015bd0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000015cb0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015c40000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000006080510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005ff01000041000005ff0340009c0000000003010019000000000304401900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d0000000003010019000005ff010000410000000004000414000005ff0540009c0000000001044019000000c001100210000000600220021000000000011200190000065101100041000000000203001917f717e80000040f0000000102200190000016000000613d000000000101043b000000000001042d0000000001000019000017f9000104300003000000000002000000040100008a000000000310003100000607010000410000005f0230008c000000000200001900000000020120190000060704300197000000000504004b0000000001008019000006070440009c000000000102c019000000000101004b000016480000613d00000002010003670000004402100370000000000202043b000006080420009c000016480000213d00000000032300490000060704000041000002600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b000016480000c13d0000000003000411000080010330008c000016460000c13d000000000300041200000609033001970000000004000410000000000343004b000016460000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000164a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005ff02000041000005ff0310009c0000000001028019000000c001100210000080010200003917f717e30000040f000000010300002900030000000103550000006001100270000105ff0010019d000000200130011a00000001012001950000000101200190000016620000613d0000000001000019000017f80001042e0000000001000019000017f90001043000000000431200a900000000422300d9000000000112004b000016770000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000016370000613d000005ff02000041000005ff0410009c0000000001028019000000c00110021000000641011001c700008009020000390000800104000039000000000500001917f717e30000040f0000000003000415000000020330008a00000020033000c90000163f0000013d000000400100043d00000064021000390000065203000041000000000032043500000044021000390000065303000041000000000032043500000024021000390000002503000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f9000104300000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000000000101004b000016800000613d000000000001042d000000400100043d00000064021000390000065403000041000000000032043500000044021000390000065503000041000000000032043500000024021000390000002203000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000000300003100000000041300490000001f0540008a0000000204000367000000000224034f000000000202043b0000060706000041000000000752004b0000000007000019000000000706401900000607055001970000060708200197000000000958004b000000000600a019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b000016bf0000613d0000000001120019000000000214034f000000000202043b000006080420009c000016bf0000213d000000000323004900000020011000390000060704000041000000000531004b0000000005000019000000000504201900000607033001970000060706100197000000000736004b0000000004008019000000000336013f000006070330009c00000000030500190000000003046019000000000303004b000016bf0000c13d000000000001042d0000000001000019000017f9000104300000000004010019000006560120009c000016f40000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000006080750009c000016f40000213d0000000106600190000016f40000c13d000000400050043f00000000052104360000000006420019000000000336004b000016fa0000213d0000001f0320018f00000002044003670000000506200272000016e20000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000016da0000413d000000000703004b000016f10000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f9000104300000000001000019000017f9000104300000000043020434000000410330008c0000174f0000c13d00000041032000390000000003030433000000ff0330018f0000001d0530008a000000030600008a000000000565004b000017610000a13d000000400220003900000000050204330000000004040433000000400200043d000006580650009c000017730000813d00000060062000390000000000560435000000400520003900000000004504350000002004200039000000000034043500000000001204350000000000000435000005ff010000410000000003000414000005ff0430009c0000000003018019000005ff0420009c00000000010240190000004001100210000000c002300210000000000112019f00000659011001c7000000010200003917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000017310000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000172a0000413d000000000605004b0000173f0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017840000613d000000000100043300000609011001970000000002000410000000000221004b00000000020000190000000102006039000000000101004b0000000001000019000000010100c039000000000112016f000000010110018f000000000001042d000000400100043d00000044021000390000065703000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d00000044021000390000065b03000041000000000032043500000024021000390000001603000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f90001043000000044012000390000065a03000041000000000031043500000024012000390000000903000039000000000031043500000615010000410000000000120435000000040120003900000020030000390000000000310435000005ff01000041000005ff0320009c0000000001024019000000400110021000000616011001c7000017f900010430000000400200043d0000001f0430018f0000000503300272000017910000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017890000413d000000000504004b000017a00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f9000104300000000001000411000080010110008c000017ae0000613d000000000001042d0000064b0100004100000000001004350000000101000039000000040010043f0000064c01000041000017f900010430000000000403004b000017be0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b70000413d00000000012300190000000000010435000000000001042d000000e0031000390000000202000367000000000332034f000000000303043b0000060903300198000017cb0000613d0000012001100039000000000112034f000000000101043b000017dc0000013d000000a003100039000000000332034f0000006004100039000000000442034f000000000404043b000000000503043b00000000634500a9000000000605004b000017d70000613d00000000655300d9000000000445004b000017dd0000c13d0000012001100039000000000112034f000000000101043b000000000131001a000017dd0000413d000000000001042d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000017e6002104210000000102000039000000000001042d0000000002000019000000000001042d000017eb002104230000000102000039000000000001042d0000000002000019000000000001042d000017f0002104210000000102000039000000000001042d0000000002000019000000000001042d000017f5002104230000000102000039000000000001042d0000000002000019000000000001042d000017f700000432000017f80001042e000017f9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f19010000000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39202bcce700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000002000002000000000000000000000000000000000000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f706575650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c00000000000000000000000000000000000000000000000100000000000000005369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f72203238000000000000000000006a1bd7e3ec749c513a118c441484f53b26b29841d2cab7a6b59c99038c788885", - "deployedBytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005ff0430019700030000004103550002000000010355000005ff0030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000006010430009c000000450000a13d000006020430009c000000a90000613d000006030430009c000000ea0000613d000006040330009c000000a60000c13d000000040220008a0000060703000041000000200420008c000000000400001900000000040340190000060705200197000000000605004b000000000300a019000006070550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000006080310009c0000010d0000213d00000000011200490000060702000041000002600310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d0000002001000039000001000010044300000120000004430000060001000041000017f80001042e000000000102004b000000a60000c13d0000000001000019000017f80001042e000006050430009c000000eb0000613d000006060330009c000000a60000c13d000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000006080430009c0000010d0000213d000000040530003900000000045200490000060706000041000002600740008c000000000700001900000000070640190000060704400197000000000804004b000000000600a019000006070440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d000000000400041200000609064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b0000060708000041000000000976004b000000000900001900000000090880190000060707700197000006070a600197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000006080760009c0000010d0000213d000000000762004900000020025000390000060708000041000000000972004b000000000900001900000000090820190000060707700197000006070a200197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000061501000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062d01000041000000c40010043f0000062e01000041000000e40010043f0000062c01000041000017f90001043017f717aa0000040f0000000001000019000017f80001042e000000040320008a0000060704000041000000600630008c000000000600001900000000060440190000060703300197000000000703004b000000000400a019000006070330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000006080370009c0000010d0000213d000000040670003900000000036200490000060704000041000002600830008c000000000800001900000000080440190000060703300197000000000903004b000000000400a019000006070330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d000000000300041200000609033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b0000060904400197000000000303043b0000060a0830009c000001310000413d00000044015000390000061402000041000000000021043500000024015000390000000802000039000000000021043500000615010000410000000000150435000000040150003900000020020000390000000000210435000005ff01000041000005ff0250009c0000000001054019000000400110021000000616011001c7000017f90001043017f716020000040f000000040320008a0000060704000041000000600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000006080330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d00000000023200490000060703000041000002600420008c000000000400001900000000040340190000060702200197000000000502004b000000000300a019000006070220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017f9000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d000000000100041200000609011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d00000020031000390000062f0400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006300310009c0000015e0000413d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f900010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b0000060708000041000000000975004b000000000900001900000000090880190000060707700197000006070a500197000000000b7a004b000000000800801900000000077a013f000006070770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000006080160009c0000010d0000213d000000000162004900000020025000390000060705000041000000000712004b0000000007000019000000000705201900000607011001970000060708200197000000000918004b0000000005008019000000000118013f000006070110009c00000000010700190000000001056019000000000101004b0000010d0000c13d00000000010004140000060b0510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f00000000040104330000060b0540009c000001740000413d00000615020000410000000000230435000000a40210003900000614040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005ff01000041000005ff0230009c0000000001034019000000400110021000000616011001c7000017f900010430000000c0022002100000061102200197000000400110021000000631011000410000063201100197000000000112019f00000060024002100000063302200197000000000121019f00000634011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917f717e30000040f00030000000103550000006001100270000105ff0010019d000005ff041001970000003f014000390000063505100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000006080630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012a20000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002a30000c13d0000000702000029000000000121034f000000000101043b000000800210008c0000031e0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c0000000001002019000000090200002900000021022000390000000000120435000004760000013d000000000221034f000000000202043b0000060c02200197000006170720009c0000026e0000c13d000000430260008c000002850000213d0000061501000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062a01000041000000c40010043f0000062b01000041000000e40010043f0000062c01000041000017f9000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060c088001970000060d0980009c0000024a0000613d0000060e0980009c0000024a0000613d0000060f0980009c0000024a0000613d000006100580009c00000000050000190000000105006039000000010550018f0000000008260019000005ff02200197000000000227034f000000000703004b0000027a0000c13d000000000368004b0000027f0000413d0000000003000031000000000683004b0000027f0000413d00000612060000410000061307000041000000000505004b00000000050600190000000005076019000000c0011002100000061101100197000000000115019f0000000003830049000005ff0330019700000000023203df00000000011203af000000000204001917f717ed0000040f000002fc0000013d0000000001010433000005ff02000041000005ff0410009c0000000001028019000005ff0430009c000000000203401900000040022002100000006001100210000000000121019f000017f900010430000006180120009c000000430000613d0000061501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000061901000041000000c40010043f0000061a01000041000017f900010430000000000668004b0000027f0000413d0000000006000031000000000786004b000002f20000813d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f9000104300000002402500039000000000221034f000000000202043b000b00000002001d000006090220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061b02000041000000800020043f0000060902400197000800000002001d000000840020043f0000060901100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c000003970000c13d0000000103000031000000200130008c00000020040000390000000004034019000003c30000013d000000710320008c0000033b0000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d00000000044200190000060705000041000000000643004b0000000006000019000000000605801900000607044001970000060707300197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000006080410009c0000010d0000213d000000000212004900000020033000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d00000000020004140000000004310019000000000114004b00000000010000190000000101004039000005ff0330019700000001011001900000027f0000c13d0000000001000031000000000541004b0000027f0000413d00000002033003670000060b0520009c000007da0000413d000000400100043d00000044021000390000061403000041000000000032043500000024021000390000000803000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f9000104300000000006860049000005ff0660019700000000026203df000000c001100210000006110110019700000612011001c700000000011203af0000800902000039000000000600001917f717ed0000040f000300000001035500000000030100190000006003300270000105ff0030019d000005ff033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000030e0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003070000413d000000000504004b0000031c0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400200043d000900000002001d000006390220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000032a0000413d00000009030000290000000003030433000000000303004b0000046d0000c13d0000064b0100004100000000001004350000003201000039000000040010043f0000064c01000041000017f900010430000000020120008c000003eb0000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005b10000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000003840000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000037c0000413d000000000500004b000003860000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005ce0000013d000005ff02000041000005ff0310009c0000000001028019000000c0011002100000061c011001c70000000b0200002917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b00000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000003a80000413d000000000705004b000003bf0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004470000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a0024000390000061d030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061e03000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c000005470000c13d00000001020000390000000101000031000005580000013d000000010120008c000004c70000c13d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006430000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004340000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000042c0000413d000000000500004b000004360000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006600000013d000000400200043d0000001f0430018f0000000503300272000004540000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000044c0000413d000000000504004b000004630000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004d90000413d00000080012002700000063b0320009c000000000102a0190000063b0320009c0000000003000019000000100300203900000008043001bf000006080510009c00000000030420190000004004100270000006080510009c000000000104201900000004043001bf000005ff0510009c00000000030420190000002004100270000005ff0510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004b40000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004ac0000413d000000000500004b000004b60000613d0000000005010433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004f60000013d000000400100043d00000044021000390000063603000041000000000032043500000024021000390000001703000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004e30000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006b00000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000005340000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000052c0000413d000000000600004b000005360000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006cd0000013d000005ff04000041000005ff0530009c000000000304801900000060033002100000004002200210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000700000003001d000000000301004b000005810000c13d00000007010000290000000031010434000200000003001d000000000202004b0000061e0000c13d000000000201004b000007610000c13d000000400400043d000b00000004001d0000061501000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005a10000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000005990000413d000000000604004b0000055c0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000055c0000013d000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005bb0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c0000076c0000413d00000080023002700000063b0430009c000000000203a0190000063b0430009c0000000004000019000000100400203900000008054001bf000006080620009c00000000040520190000004005200270000006080620009c000000000205201900000004054001bf000005ff0620009c00000000040520190000002005200270000005ff0620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000060b0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006030000413d000000000600004b0000060d0000613d0000000006020433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000007890000013d000000000201004b00000a360000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a320000c13d000000400100043d00000044021000390000062903000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d000006390310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000064d0000413d0000000004010433000000000404004b000003350000613d000000f8042002100000060705000041000000000202004b0000000002040019000000000205601900000000040304330000063a04400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009c40000413d00000080032002700000063b0420009c000000000302a0190000063b0420009c0000000004000019000000100400203900000008054001bf000006080630009c00000000040520190000004005300270000006080630009c000000000305201900000004054001bf000005ff0630009c00000000040520190000002005300270000005ff0630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000006080750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005530436000000210640003900000005066002720000069d0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000006950000413d000000000600004b0000069f0000613d0000000006030433000000000606004b000003350000613d00000000060504330000063a06600197000000f807400210000000000667019f0000063c0660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009e10000013d000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006ba0000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006db0000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006d40000413d000000000143001900000000000104350000000004020433000000000504004b000006e80000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006e10000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000006080220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f000006390110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f00000020025000390000063d0300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bd20000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000005040000290000000003340436000000210420003900000005044002720000074c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007440000413d000000000400004b0000074e0000613d00000005040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063c0440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000bf20000013d000005ff020000410000000204000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000007760000413d0000000005020433000000000505004b000003350000613d000000f8053002100000060706000041000000000303004b0000000003050019000000000306601900000000050404330000063a05500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a730000413d00000080043002700000063b0530009c000000000403a0190000063b0530009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007c70000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007bf0000413d000000000700004b000007c90000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a900000013d0000000001410049000005ff0110019700000000011303df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff033001970003000000010355000000010220019000000ae10000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008050000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007fd0000413d000000000400004b000008070000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008170000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b0000080f0000413d000000000604004b000008260000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b0000060706000041000000000753004b0000000007000019000000000706801900000607055001970000060708300197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000006080350009c0000010d0000213d0000000503500210000000000434004900000020061000390000060701000041000000000746004b0000000007000019000000000701201900000607044001970000060708600197000000000948004b0000000001008019000000000448013f000006070440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d00000020041000390000064205500198000008650000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b0000085d0000413d000000000200004b000008670000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000006080520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005ff02000041000005ff0340009c0000000003020019000000000304401900000040033002100000000001010433000005ff0410009c00000000010280190000006001100210000000000131019f0000000003000414000005ff0430009c0000000002034019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b0000060706000041000000000754004b0000000007000019000000000706801900000607055001970000060708400197000000000958004b0000000006008019000000000558013f000006070550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000006080310009c0000010d0000213d000000000212004900000020034000390000060704000041000000000523004b0000000005000019000000000504201900000607022001970000060706300197000000000726004b0000000004008019000000000226013f000006070220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005ff043001970000027f0000413d0000000003000031000000000513004b0000027f0000413d0000000204400367000005ff0520009c000002e00000213d0000000001130049000005ff0110019700000000011403df000000c002200210000006110220019700000613022001c700000000012103af000080100200003917f717f20000040f00000000030100190000006003300270000105ff0030019d000005ff0330019700030000000103550000000102200190000014500000613d0000003f013000390000063501100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008eb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008e30000413d000000000400004b000008ed0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008fd0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008f50000413d000000000604004b0000090c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000ce90000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a0061000390000000000560435000000800510003900000000004504350000006004100039000000000034043500000040031000390000000000230435000000200210003900000644030000410000000000320435000001c0030000390000000000310435000006450310009c0000012b0000213d000001e003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b000006460300004100000000003204350000008003400039000000000013043500000060014000390000064703000041000000000031043500000040014000390000064803000041000000000031043500000080010000390000000000140435000006490140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005ff01000041000005ff0320009c000000000201801900000040022002100000000003040433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064a0400004100000000004204350000002204100039000000000034043500000042030000390000000000310435000006250310009c0000012b0000213d0000008003100039000000400030043f000005ff03000041000005ff0420009c000000000203801900000040022002100000000001010433000005ff0410009c00000000010380190000006001100210000000000121019f0000000002000414000005ff0420009c0000000002038019000000c002200210000000000112019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400300043d000006390430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009ce0000413d0000000005030433000000000505004b000003350000613d000000f8052002100000060706000041000000000202004b0000000002050019000000000206601900000000050404330000063a05500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b640000413d00000080042002700000063b0520009c000000000402a0190000063b0520009c0000000005000019000000100500203900000008065001bf000006080740009c00000000050620190000004006400270000006080740009c000000000406201900000004065001bf000005ff0740009c00000000050620190000002006400270000005ff0740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000006080860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a1f0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a170000413d000000000700004b00000a210000613d0000000007040433000000000707004b000003350000613d00000000070604330000063a07700197000000f808500210000000000778019f0000063c0770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b810000013d00000007010000290000000001010433000000000201004b00000a600000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a600000c13d000000400100043d00000064021000390000062703000041000000000032043500000044021000390000062803000041000000000032043500000024021000390000002a03000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400300043d0000002401300039000000090200002900000000002104350000061b010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000afc0000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b2f0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a7d0000413d0000000006040433000000000606004b000003350000613d000000f8063002100000060707000041000000000303004b0000000003060019000000000307601900000000060504330000063a06600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c670000413d00000080053002700000063b0630009c000000000503a0190000063b0630009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ace0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000ac60000413d000000000800004b00000ad00000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c840000013d0000001f0430018f000000050230027200000aec0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000ae50000413d000000000504004b00000afa0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000005ff02000041000005ff0310009c00000000010280190000000704000029000005ff0340009c00000000020440190000004002200210000000c001100210000000000121019f00000621011001c70000000b0200002917f717e80000040f000000070a00002900000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b1b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b130000413d000000000705004b00000b2b0000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c410000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000006080410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000cd50000c13d00000044021000390000000a03000029000000000032043500000020021000390000061d03000041000000000032043500000024031000390000000904000029000000000043043500000003030000290000000000310435000006250310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f000006260310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061e03000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000df70000c13d0000000102000039000000010100003100000e0a0000013d000000400400043d000006390540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b6e0000413d0000000006040433000000000606004b000003350000613d000000f8062002100000060707000041000000000202004b0000000002060019000000000207601900000000060504330000063a06600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cfb0000413d00000080052002700000063b0620009c000000000502a0190000063b0620009c0000000006000019000000100600203900000008076001bf000006080850009c00000000060720190000004007500270000006080850009c000000000507201900000004076001bf000005ff0850009c00000000060720190000002007500270000005ff0850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000006080970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bbf0000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bb70000413d000000000800004b00000bc10000613d0000000008050433000000000808004b000003350000613d00000000080704330000063a08800197000000f809600210000000000889019f0000063c0880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d180000013d000000400200043d000500000002001d000006390220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bde0000413d00000005030000290000000003030433000000000303004b000003350000613d000000f8031002100000060704000041000000000101004b0000000001030019000000000104601900000000030204330000063a03300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d00000000044300190000060705000041000000000641004b0000000006000019000000000605801900000607044001970000060707100197000000000847004b0000000005008019000000000447013f000006070440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000006080510009c0000010d0000213d000000000513004900000020034000390000060704000041000000000653004b0000000006000019000000000604201900000607055001970000060707300197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f320000c13d000000000132034f000000000101043b000000010200008a0000060703000041000000000221004b000000000200001900000000020320190000060701100197000006070410009c00000000030080190000060701100167000006070110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010900000c13d000000400100043d000400000001001d000006390110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063c02000041000000000021043500000001010000390000000000130435000010900000013d000000400200043d0000001f0430018f000000050330027200000c4e0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c460000413d000000000504004b00000c5d0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c710000413d0000000007050433000000000707004b000003350000613d000000f8073002100000060708000041000000000303004b0000000003070019000000000308601900000000070604330000063a07700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d790000413d00000080063002700000063b0730009c000000000603a0190000063b0730009c0000000007000019000000100700203900000008087001bf000006080960009c00000000070820190000004008600270000006080960009c000000000608201900000004087001bf000005ff0960009c00000000070820190000002008600270000005ff0960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000006080a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cc20000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cba0000413d000000000900004b00000cc40000613d0000000009060433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063c0990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d960000013d00000064021000390000062203000041000000000032043500000044021000390000062303000041000000000032043500000024021000390000003603000039000000000032043500000615020000410000000000210435000000040210003900000006030000290000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001f03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400500043d000006390650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000d050000413d0000000007050433000000000707004b000003350000613d000000f8072002100000060708000041000000000202004b0000000002070019000000000208601900000000070604330000063a07700197000000000227019f0000000000260435000000400600043d000006390260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f00000020076000390000063d0800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e630000413d00000080072002700000063b0820009c000000000702a0190000063b0820009c0000000008000019000000100800203900000008098001bf000006080a70009c00000000080920190000004009700270000006080a70009c000000000709201900000004098001bf000005ff0a70009c00000000080920190000002009700270000005ff0a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000006080b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d660000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d5e0000413d000000000a00004b00000d680000613d000000000a070433000000000a0a004b000003350000613d000000000a0904330000063a0aa00197000000f80b800210000000000aab019f0000063c0aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e800000013d000000400600043d000006390760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d830000413d0000000008060433000000000808004b000003350000613d000000f8083002100000060709000041000000000303004b0000000003080019000000000309601900000000080704330000063a08800197000000000338019f0000000000370435000000400700043d000006390370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f00000020087000390000063d090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f950000413d00000080083002700000063b0930009c000000000803a0190000063b0930009c00000000090000190000001009002039000000080a9001bf000006080b80009c00000000090a2019000000400a800270000006080b80009c00000000080a2019000000040a9001bf000005ff0b80009c00000000090a2019000000200a800270000005ff0b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000006080ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000de40000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000ddc0000413d000000000b00004b00000de60000613d000000000b080433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c900210000000000bbc019f0000063c0bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fb20000013d000005ff04000041000005ff0520009c00000000020480190000004002200210000005ff0530009c00000000030480190000006003300210000000000223019f000005ff0310009c0000000001048019000000c001100210000000000112019f0000000b0200002917f717e30000040f000000010220018f00030000000103550000006001100270000105ff0010019d000005ff011001970000006003000039000900000003001d000000000301004b00000e330000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f680000c13d000000000201004b0000115f0000c13d000000400400043d000b00000004001d000006150100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917f717b40000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005ff02000041000005ff0310009c00000000010280190000000b04000029000005ff0340009c000000000204401900000040022002100000006001100210000000000121019f000017f900010430000006080310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000006080530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e530000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e4b0000413d000000000604004b00000e0e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e0e0000013d000000400700043d000006390870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e6d0000413d0000000009070433000000000909004b000003350000613d000000f809200210000006070a000041000000000202004b000000000209001900000000020a601900000000090804330000063a09900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e8d0000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e860000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e9c0000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e950000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000eab0000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000ea40000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eba0000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000eb30000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ec90000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000ec20000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ed80000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ed10000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000006080450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012c60000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013440000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013440000013d000000380210008c000010730000413d0000002002100270000005ff0310009c00000000030100190000000003022019000005ff0210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d000006390440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f500000413d00000004040000290000000004040433000000000404004b000003350000613d00000000040304330000063a04400197000000f805200210000000000445019f0000063e044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010900000013d000000000201004b00000f7f0000c13d0000061f0100004100000000001004390000000b010000290000000400100443000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000620011001c7000080020200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006310000613d00000009010000290000000001010433000000000201004b000000430000613d0000060702000041000000200310008c000000000300001900000000030240190000060701100197000000000401004b000000000200a019000006070110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a4b0000613d000000430000013d000000400800043d000006390980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f9f0000413d000000000a080433000000000a0a004b000003350000613d000000f80a300210000006070b000041000000000303004b00000000030a001900000000030b6019000000000a0904330000063a0aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fbf0000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fb80000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fce0000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fc70000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fdd0000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fd60000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fec0000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fe50000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ffb0000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000ff40000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b0000100a0000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b000010030000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b000010190000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010120000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000006080450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000006070a000041000000000b96004b000000000b000019000000000b0a80190000060709900197000006070c600197000000000d9c004b000000000a00801900000000099c013f000006070990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000006080a60009c0000010d0000213d000000000a68004900000020089000390000060709000041000000000ba8004b000000000b000019000000000b092019000006070aa00197000006070c800197000000000dac004b0000000009008019000000000aac013f000006070aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000012f80000c13d000000000687034f000000000606043b000000010700008a0000060708000041000000000776004b000000000700001900000000070820190000060706600197000006070960009c00000000080080190000060706600167000006070660009c00000000070860190000006006000039000000000707004b000013d70000c13d000006390650009c0000012b0000213d0000004006500039000000400060043f00000020065000390000063c070000410000000000760435000000010600003900000000006504350000000006050019000013d70000013d000000400200043d000400000002001d000006390220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a0000107f0000413d00000004030000290000000003030433000000000303004b000003350000613d000000f80110021000000000030204330000063a03300197000000000113019f0000060701100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000011050000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b0000060704000041000000000659004b0000000006000019000000000604801900000607055001970000060707900197000000000857004b0000000004008019000000000557013f000006070550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000006080a20009c0000010d0000213d00000000032300490000002009900039000006070a000041000000000b39004b000000000b000019000000000b0a201900000607033001970000060709900197000000000c39004b000000000a008019000000000339013f000006070330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d00000000034500190000000003630019000000000373001900000000038300190000000002230019000000000301043300000000023200190000060802200197000000380320008c000011a70000413d0000002003200270000005ff0420009c00000000040200190000000004032019000005ff0320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d000006390560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010ef0000413d0000000005060433000000000505004b000003350000613d00000000050404330000063a05500197000000f807300210000000000557019f00000640055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011c10000013d00000637010000410000000000100439000005ff010000410000000002000414000005ff0320009c0000000001024019000000c00110021000000638011001c70000800b0200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000000800210008c0000116a0000413d00000080021002700000063b0310009c000000000201a0190000063b0310009c0000000003000019000000100300203900000008043001bf000006080520009c00000000030420190000004004200270000006080520009c000000000204201900000004043001bf000005ff0520009c00000000030420190000002004200270000005ff0520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000006080640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004420436000000210530003900000005055002720000114c0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000011440000413d000000000500004b0000114e0000613d0000000005020433000000000505004b000003350000613d00000000050404330000063a05500197000000f806300210000000000556019f0000063c0550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c000000000100201900000021032000390000000000130435000011870000013d000005ff020000410000000704000029000005ff0340009c00000000030200190000000003044019000005ff0410009c000000000102801900000060011002100000004002300210000000000121019f000017f900010430000000400200043d000006390320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000011740000413d0000000004020433000000000404004b000003350000613d000000f8041002100000060705000041000000000101004b0000000001040019000000000105601900000000040304330000063a04400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b000011940000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b0000118d0000413d00000000024300190000064d0400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000006080420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f0000000202000367000010980000013d000000400600043d000006390360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011b10000413d0000000004060433000000000404004b000003350000613d000000f80220021000000000040304330000063a04400197000000000242019f0000063f02200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b0000060707000041000000000854004b0000000008000019000000000807801900000607055001970000060709400197000000000a59004b0000000007008019000000000559013f000006070550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000006080340009c0000010d0000213d000000000242004900000020055000390000060703000041000000000725004b0000000007000019000000000703201900000607022001970000060708500197000000000928004b0000000003008019000000000228013f000006070220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011f90000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011f20000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b0000120a0000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012020000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b0000121b0000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012130000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b0000122c0000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012240000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b0000123d0000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012350000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b0000124e0000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012460000413d0000000008870019000000000008043500000000066700190000001f0740018f0000002008600039000000020550036700000005094002720000125f0000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b000012570000413d000000000a07004b0000126e0000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b0000127c0000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b000012750000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000006080510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005ff01000041000005ff0430009c000000000301801900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000a0100002917f717c10000040f0000064e02000041000000000020043900000008020000290000000400200443000800000001001d0000800a01000039000000240200003917f715f10000040f0000000802000029000000000112004b0000000001000019000000010100a03917f7167d0000040f0000000b01000029000001e4021000390000000a0100002917f716950000040f000000000300003117f716c10000040f0000000002010019000000090100002917f716fc0000040f0000064f02000041000000000101004b00000000010200190000000001006019000000400200043d0000000000120435000005ff01000041000005ff0320009c0000000001024019000000400110021000000650011001c7000017f80001042e000000380760008c0000132a0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000012e10000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013440000013d000000380760008c000013bd0000413d0000002007600270000005ff0860009c00000000080600190000000008072019000005ff0760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c00000000080000190000000108002039000006390950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013130000413d0000000009050433000000000909004b000003350000613d00000000090804330000063a09900197000000f80a70021000000000099a019f0000063e099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000013d70000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013330000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000134e0000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000146b0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000013a70000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000014840000013d000006390750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000013c60000413d0000000008050433000000000808004b000003350000613d000000f80660021000000000080704330000063a08800197000000000668019f000006070660016700000000006704350000000006050019000000400500043d000006390750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000013e10000413d0000000009050433000000000909004b000003350000613d00000000090704330000063a099001970000063f099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000006070a000041000000000d9c004b000000000d000019000000000d0a80190000060709900197000006070ec00197000000000f9e004b000000000a00801900000000099e013f000006070990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000006080db0009c0000010d0000213d0000000007b70049000000200cc00039000006070d000041000000000e7c004b000000000e000019000000000e0d20190000060707700197000006070cc00197000000000f7c004b000000000d00801900000000077c013f000006070770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b70019000000000905043300000000079700190000060809700197000000380790008c0000152e0000413d0000002007900270000005ff0890009c000000000709a019000005ff0890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d000006390b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000143a0000413d000000000b070433000000000b0b004b000003350000613d000000000b0a04330000063a0bb00197000000f80c800210000000000bbc019f000006400bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015470000013d0000001f0430018f00000005023002720000145b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000014540000413d000000000504004b000014690000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017f900010430000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000014740000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000006070a000041000000000b83004b000000000b000019000000000b0a80190000060708800197000006070c300197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020093000390000060703000041000000000a49004b000000000a000019000000000a0320190000060704400197000006070b900197000000000c4b004b000000000300801900000000044b013f000006070440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d0000002004300039000006340a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000014bc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000014b50000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000014cb0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000014c40000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b000014da0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000014d30000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a800272000014eb0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000014e30000413d000000000b06004b000014fa0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000015080000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015010000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000006080510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005ff01000041000005ff0240009c0000000002010019000000000204401900000040022002100000000003030433000005ff0430009c00000000030180190000006003300210000000000223019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d000000400700043d000006390a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015370000413d000000000a070433000000000a0a004b000003350000613d000000f809900210000000000a0804330000063a0aa001970000000009a9019f0000063f099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000006070a000041000000000b82004b000000000b000019000000000b0a80190000060708800197000006070c200197000000000d8c004b000000000a00801900000000088c013f000006070880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000006080480009c0000010d0000213d000000000489004900000020092000390000060702000041000000000a49004b000000000a000019000000000a0220190000060704400197000006070b900197000000000c4b004b000000000200801900000000044b013f000006070440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006410a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b0000157f0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015780000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b0000158e0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000015870000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b0000159d0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000015960000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000015ae0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000015a60000413d000000000b06004b000015bd0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000015cb0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000015c40000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000006080510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005ff01000041000005ff0340009c0000000003010019000000000304401900000040033002100000000002020433000005ff0420009c00000000020180190000006002200210000000000232019f0000000003000414000005ff0430009c0000000001034019000000c001100210000000000121019f00000641011001c7000080100200003917f717e80000040f0000000102200190000012a00000c13d0000010d0000013d0000000003010019000005ff010000410000000004000414000005ff0540009c0000000001044019000000c001100210000000600220021000000000011200190000065101100041000000000203001917f717e80000040f0000000102200190000016000000613d000000000101043b000000000001042d0000000001000019000017f9000104300003000000000002000000040100008a000000000310003100000607010000410000005f0230008c000000000200001900000000020120190000060704300197000000000504004b0000000001008019000006070440009c000000000102c019000000000101004b000016480000613d00000002010003670000004402100370000000000202043b000006080420009c000016480000213d00000000032300490000060704000041000002600530008c000000000500001900000000050440190000060703300197000000000603004b000000000400a019000006070330009c00000000030500190000000003046019000000000303004b000016480000c13d0000000003000411000080010330008c000016460000c13d000000000300041200000609033001970000000004000410000000000343004b000016460000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000164a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005ff02000041000005ff0310009c0000000001028019000000c001100210000080010200003917f717e30000040f000000010300002900030000000103550000006001100270000105ff0010019d000000200130011a00000001012001950000000101200190000016620000613d0000000001000019000017f80001042e0000000001000019000017f90001043000000000431200a900000000422300d9000000000112004b000016770000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000016370000613d000005ff02000041000005ff0410009c0000000001028019000000c00110021000000641011001c700008009020000390000800104000039000000000500001917f717e30000040f0000000003000415000000020330008a00000020033000c90000163f0000013d000000400100043d00000064021000390000065203000041000000000032043500000044021000390000065303000041000000000032043500000024021000390000002503000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f9000104300000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000000000101004b000016800000613d000000000001042d000000400100043d00000064021000390000065403000041000000000032043500000044021000390000065503000041000000000032043500000024021000390000002203000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000624011001c7000017f900010430000000000300003100000000041300490000001f0540008a0000000204000367000000000224034f000000000202043b0000060706000041000000000752004b0000000007000019000000000706401900000607055001970000060708200197000000000958004b000000000600a019000000000558013f000006070550009c00000000050700190000000005066019000000000505004b000016bf0000613d0000000001120019000000000214034f000000000202043b000006080420009c000016bf0000213d000000000323004900000020011000390000060704000041000000000531004b0000000005000019000000000504201900000607033001970000060706100197000000000736004b0000000004008019000000000336013f000006070330009c00000000030500190000000003046019000000000303004b000016bf0000c13d000000000001042d0000000001000019000017f9000104300000000004010019000006560120009c000016f40000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000006080750009c000016f40000213d0000000106600190000016f40000c13d000000400050043f00000000052104360000000006420019000000000336004b000016fa0000213d0000001f0320018f00000002044003670000000506200272000016e20000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000016da0000413d000000000703004b000016f10000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d0000064b0100004100000000001004350000004101000039000000040010043f0000064c01000041000017f9000104300000000001000019000017f9000104300000000043020434000000410330008c0000174f0000c13d00000041032000390000000003030433000000ff0330018f0000001d0530008a000000030600008a000000000565004b000017610000a13d000000400220003900000000050204330000000004040433000000400200043d000006580650009c000017730000813d00000060062000390000000000560435000000400520003900000000004504350000002004200039000000000034043500000000001204350000000000000435000005ff010000410000000003000414000005ff0430009c0000000003018019000005ff0420009c00000000010240190000004001100210000000c002300210000000000112019f00000659011001c7000000010200003917f717e80000040f00000000030100190000006003300270000005ff03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000017310000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b0000172a0000413d000000000605004b0000173f0000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000017840000613d000000000100043300000609011001970000000002000410000000000221004b00000000020000190000000102006039000000000101004b0000000001000019000000010100c039000000000112016f000000010110018f000000000001042d000000400100043d00000044021000390000065703000041000000000032043500000024021000390000001d03000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f900010430000000400100043d00000044021000390000065b03000041000000000032043500000024021000390000001603000039000000000032043500000615020000410000000000210435000000040210003900000020030000390000000000320435000005ff02000041000005ff0310009c0000000001028019000000400110021000000616011001c7000017f90001043000000044012000390000065a03000041000000000031043500000024012000390000000903000039000000000031043500000615010000410000000000120435000000040120003900000020030000390000000000310435000005ff01000041000005ff0320009c0000000001024019000000400110021000000616011001c7000017f900010430000000400200043d0000001f0430018f0000000503300272000017910000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017890000413d000000000504004b000017a00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005ff010000410000000103000031000005ff0430009c0000000003018019000005ff0420009c000000000102401900000040011002100000006002300210000000000112019f000017f9000104300000000001000411000080010110008c000017ae0000613d000000000001042d0000064b0100004100000000001004350000000101000039000000040010043f0000064c01000041000017f900010430000000000403004b000017be0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b70000413d00000000012300190000000000010435000000000001042d000000e0031000390000000202000367000000000332034f000000000303043b0000060903300198000017cb0000613d0000012001100039000000000112034f000000000101043b000017dc0000013d000000a003100039000000000332034f0000006004100039000000000442034f000000000404043b000000000503043b00000000634500a9000000000605004b000017d70000613d00000000655300d9000000000445004b000017dd0000c13d0000012001100039000000000112034f000000000101043b000000000131001a000017dd0000413d000000000001042d0000064b0100004100000000001004350000001101000039000000040010043f0000064c01000041000017f900010430000017e6002104210000000102000039000000000001042d0000000002000019000000000001042d000017eb002104230000000102000039000000000001042d0000000002000019000000000001042d000017f0002104210000000102000039000000000001042d0000000002000019000000000001042d000017f5002104230000000102000039000000000001042d0000000002000019000000000001042d000017f700000432000017f80001042e000017f9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f19010000000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39202bcce700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000002000002000000000000000000000000000000000000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f706575650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c00000000000000000000000000000000000000000000000100000000000000005369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f72203238000000000000000000006a1bd7e3ec749c513a118c441484f53b26b29841d2cab7a6b59c99038c788885", + "bytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005f50430019700030000004103550002000000010355000005f50030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000005f70430009c000000450000a13d000005f80430009c000000a90000613d000005f90430009c000000ea0000613d000005fa0330009c000000a60000c13d000000040220008a000005fd03000041000000200420008c00000000040000190000000004034019000005fd05200197000000000605004b000000000300a019000005fd0550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000005fe0310009c0000010d0000213d0000000001120049000005fd02000041000002600310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d000000200100003900000100001004430000012000000443000005f601000041000017d00001042e000000000102004b000000a60000c13d0000000001000019000017d00001042e000005fb0430009c000000eb0000613d000005fc0330009c000000a60000c13d000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000005fe0430009c0000010d0000213d00000004053000390000000004520049000005fd06000041000002600740008c00000000070000190000000007064019000005fd04400197000000000804004b000000000600a019000005fd0440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d0000000004000412000005ff064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b000005fd08000041000000000976004b00000000090000190000000009088019000005fd07700197000005fd0a600197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000005fe0760009c0000010d0000213d00000000076200490000002002500039000005fd08000041000000000972004b00000000090000190000000009082019000005fd07700197000005fd0a200197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062301000041000000c40010043f0000062401000041000000e40010043f0000062201000041000017d10001043017cf179d0000040f0000000001000019000017d00001042e000000040320008a000005fd04000041000000600630008c00000000060000190000000006044019000005fd03300197000000000703004b000000000400a019000005fd0330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000005fe0370009c0000010d0000213d00000004067000390000000003620049000005fd04000041000002600830008c00000000080000190000000008044019000005fd03300197000000000903004b000000000400a019000005fd0330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d0000000003000412000005ff033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b000005ff04400197000000000303043b000006000830009c000001310000413d00000044015000390000060a0200004100000000002104350000002401500039000000080200003900000000002104350000060b010000410000000000150435000000040150003900000020020000390000000000210435000005f501000041000005f50250009c000000000105401900000040011002100000060c011001c7000017d10001043017cf17220000040f000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000005fe0330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d0000000002320049000005fd03000041000002600420008c00000000040000190000000004034019000005fd02200197000000000502004b000000000300a019000005fd0220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017d1000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d0000000001000412000005ff011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d0000002003100039000006250400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006260310009c0000015e0000413d0000064c0100004100000000001004350000004101000039000000040010043f0000064d01000041000017d100010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b000005fd08000041000000000975004b00000000090000190000000009088019000005fd07700197000005fd0a500197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000005fe0160009c0000010d0000213d00000000016200490000002002500039000005fd05000041000000000712004b00000000070000190000000007052019000005fd01100197000005fd08200197000000000918004b0000000005008019000000000118013f000005fd0110009c00000000010700190000000001056019000000000101004b0000010d0000c13d0000000001000414000006010510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f0000000004010433000006010540009c000001740000413d0000060b020000410000000000230435000000a4021000390000060a040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005f501000041000005f50230009c000000000103401900000040011002100000060c011001c7000017d100010430000000c0022002100000060702200197000000400110021000000627011000410000062801100197000000000112019f00000060024002100000062902200197000000000121019f0000062a011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917cf17bb0000040f00030000000103550000006001100270000105f50010019d000005f5041001970000003f014000390000062b05100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000005fe0630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012980000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002c90000c13d0000000702000029000000000121034f000000000101043b000000800210008c000003140000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000902000029000000210220003900000000001204350000046c0000013d000000000221034f000000000202043b00000602022001970000060d0720009c0000026e0000c13d000000430260008c000002ab0000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062001000041000000c40010043f0000062101000041000000e40010043f0000062201000041000017d1000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060208800197000006030980009c0000024a0000613d000006040980009c0000024a0000613d000006050980009c0000024a0000613d000006060580009c00000000050000190000000105006039000000010550018f0000000008260019000005f502200197000000000227034f000000000703004b0000027a0000c13d000000000368004b000012b40000413d0000000003000031000000000683004b000012b40000413d00000608060000410000060907000041000000000505004b00000000050600190000000005076019000000c0011002100000060701100197000000000115019f0000000003830049000005f50330019700000000023203df00000000011203af000000000204001917cf17c50000040f000002890000013d0000000001010433000005f502000041000005f50410009c0000000001028019000005f50430009c000000000203401900000040022002100000006001100210000000000121019f000017d1000104300000060e0120009c000000430000613d0000060b01000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000060f01000041000000c40010043f0000061001000041000017d100010430000000000668004b000012b40000413d0000000006000031000000000786004b000012b40000413d0000000006860049000005f50660019700000000026203df000000c001100210000006070110019700000608011001c700000000011203af0000800902000039000000000600001917cf17c50000040f000300000001035500000000030100190000006003300270000105f50030019d000005f5033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000029b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000002940000413d000000000504004b000002a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d1000104300000002402500039000000000221034f000000000202043b000b00000002001d000005ff0220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061102000041000000800020043f000005ff02400197000800000002001d000000840020043f000005ff01100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c0000038d0000c13d0000000103000031000000200130008c00000020040000390000000004034019000003b90000013d000000710320008c000003310000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d0000000004420019000005fd05000041000000000643004b00000000060000190000000006058019000005fd04400197000005fd07300197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000005fe0410009c0000010d0000213d00000000021200490000002003300039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000006010520009c000007d00000413d000000400100043d00000044021000390000060a0300004100000000003204350000002402100039000000080300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400200043d000900000002001d0000062f0220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000003200000413d00000009030000290000000003030433000000000303004b000004630000c13d0000064c0100004100000000001004350000003201000039000000040010043f0000064d01000041000017d100010430000000020120008c000003e10000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005a70000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000037a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000003720000413d000000000500004b0000037c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005c40000013d000005f502000041000005f50310009c0000000001028019000000c00110021000000612011001c70000000b0200002917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003a60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000039e0000413d000000000705004b000003b50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000043d0000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a00240003900000613030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061403000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c0000053d0000c13d000000010200003900000001010000310000054e0000013d000000010120008c000004bd0000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006390000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000042a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004220000413d000000000500004b0000042c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006560000013d000000400200043d0000001f0430018f00000005033002720000044a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004420000413d000000000504004b000004590000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004cf0000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004aa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004a20000413d000000000500004b000004ac0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004ec0000013d000000400100043d00000044021000390000062c0300004100000000003204350000002402100039000000170300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004d90000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006a60000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000052a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005220000413d000000000600004b0000052c0000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006c30000013d000005f504000041000005f50530009c000000000304801900000060033002100000004002200210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000700000003001d000000000301004b000005770000c13d00000007010000290000000031010434000200000003001d000000000202004b000006140000c13d000000000201004b000007570000c13d000000400400043d000b00000004001d0000060b01000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000058f0000413d000000000604004b000005520000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000005520000013d000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005b10000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c000007620000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000006010000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005f90000413d000000000600004b000006030000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000077f0000013d000000000201004b00000a2c0000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a280000c13d000000400100043d00000044021000390000061f03000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000006430000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009ba0000413d0000008003200270000006310420009c000000000302a019000006310420009c0000000004000019000000100400203900000008054001bf000005fe0630009c00000000040520190000004005300270000005fe0630009c000000000305201900000004054001bf000005f50630009c00000000040520190000002005300270000005f50630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000006930000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000068b0000413d000000000600004b000006950000613d0000000006030433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009d70000013d000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006b00000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006d10000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006ca0000413d000000000143001900000000000104350000000004020433000000000504004b000006de0000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006d70000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000005fe0220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f0000062f0110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f0000002002500039000006330300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bc80000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000002032000390000000504000029000000000334043600000021042000390000000504400272000007420000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000073a0000413d000000000400004b000007440000613d00000005040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000be80000013d000005f5020000410000000204000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000076c0000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a690000413d0000008004300270000006310530009c000000000403a019000006310530009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007bd0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007b50000413d000000000700004b000007bf0000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a860000013d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f5033001970003000000010355000000010220019000000ad70000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000007fb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007f30000413d000000000400004b000007fd0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f00000005033002720000080d0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008050000413d000000000604004b0000081c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b000005fd06000041000000000753004b00000000070000190000000007068019000005fd05500197000005fd08300197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000005fe0350009c0000010d0000213d000000050350021000000000043400490000002006100039000005fd01000041000000000746004b00000000070000190000000007012019000005fd04400197000005fd08600197000000000948004b0000000001008019000000000448013f000005fd0440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d000000200410003900000638055001980000085b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000008530000413d000000000200004b0000085d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000005fe0520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005f502000041000005f50340009c0000000003020019000000000304401900000040033002100000000001010433000005f50410009c00000000010280190000006001100210000000000131019f0000000003000414000005f50430009c0000000002034019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b000005fd06000041000000000754004b00000000070000190000000007068019000005fd05500197000005fd08400197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000005fe0310009c0000010d0000213d00000000021200490000002003400039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000005f50520009c000003020000213d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f50330019700030000000103550000000102200190000015810000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008e10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008d90000413d000000000400004b000008e30000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008f30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008eb0000413d000000000604004b000009020000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a006100039000000000056043500000080051000390000000000450435000000600410003900000000003404350000004003100039000000000023043500000020021000390000063a030000410000000000320435000001c00300003900000000003104350000063b0310009c0000012b0000213d000001e003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b0000063c0300004100000000003204350000008003400039000000000013043500000060014000390000063d03000041000000000031043500000040014000390000063e030000410000000000310435000000800100003900000000001404350000063f0140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005f501000041000005f50320009c000000000201801900000040022002100000000003040433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064004000041000000000042043500000022041000390000000000340435000000420300003900000000003104350000061b0310009c0000012b0000213d0000008003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400300043d0000062f0430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009c40000413d0000000005030433000000000505004b0000032b0000613d000000f805200210000005fd06000041000000000202004b0000000002050019000000000206601900000000050404330000063005500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b5a0000413d0000008004200270000006310520009c000000000402a019000006310520009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a150000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a0d0000413d000000000700004b00000a170000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b770000013d00000007010000290000000001010433000000000201004b00000a560000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a560000c13d000000400100043d00000064021000390000061d03000041000000000032043500000044021000390000061e03000041000000000032043500000024021000390000002a0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400300043d00000024013000390000000902000029000000000021043500000611010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000af20000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b250000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a730000413d0000000006040433000000000606004b0000032b0000613d000000f806300210000005fd07000041000000000303004b0000000003060019000000000307601900000000060504330000063006600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c5d0000413d0000008005300270000006310630009c000000000503a019000006310630009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ac40000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000abc0000413d000000000800004b00000ac60000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c7a0000013d0000001f0430018f000000050230027200000ae20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000adb0000413d000000000504004b00000af00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000005f502000041000005f50310009c00000000010280190000000704000029000005f50340009c00000000020440190000004002200210000000c001100210000000000121019f00000617011001c70000000b0200002917cf17c00000040f000000070a00002900000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b110000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b090000413d000000000705004b00000b210000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c370000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000005fe0410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000ccb0000c13d00000044021000390000000a030000290000000000320435000000200210003900000613030000410000000000320435000000240310003900000009040000290000000000430435000000030300002900000000003104350000061b0310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f0000061c0310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061403000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000ded0000c13d0000000102000039000000010100003100000e000000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b640000413d0000000006040433000000000606004b0000032b0000613d000000f806200210000005fd07000041000000000202004b0000000002060019000000000207601900000000060504330000063006600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cf10000413d0000008005200270000006310620009c000000000502a019000006310620009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bb50000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bad0000413d000000000800004b00000bb70000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d0e0000013d000000400200043d000500000002001d0000062f0220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bd40000413d00000005030000290000000003030433000000000303004b0000032b0000613d000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d0000000004430019000005fd05000041000000000641004b00000000060000190000000006058019000005fd04400197000005fd07100197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000005fe0510009c0000010d0000213d00000000051300490000002003400039000005fd04000041000000000653004b00000000060000190000000006042019000005fd05500197000005fd07300197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f280000c13d000000000132034f000000000101043b000000010200008a000005fd03000041000000000221004b00000000020000190000000002032019000005fd01100197000005fd0410009c0000000003008019000005fd01100167000005fd0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010860000c13d000000400100043d000400000001001d0000062f0110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063202000041000000000021043500000001010000390000000000130435000010860000013d000000400200043d0000001f0430018f000000050330027200000c440000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c3c0000413d000000000504004b00000c530000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c670000413d0000000007050433000000000707004b0000032b0000613d000000f807300210000005fd08000041000000000303004b0000000003070019000000000308601900000000070604330000063007700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d6f0000413d0000008006300270000006310730009c000000000603a019000006310730009c0000000007000019000000100700203900000008087001bf000005fe0960009c00000000070820190000004008600270000005fe0960009c000000000608201900000004087001bf000005f50960009c00000000070820190000002008600270000005f50960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000005fe0a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cb80000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cb00000413d000000000900004b00000cba0000613d0000000009060433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f000006320990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d8c0000013d0000006402100039000006180300004100000000003204350000004402100039000006190300004100000000003204350000002402100039000000360300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400100043d00000044021000390000063903000041000000000032043500000024021000390000001f0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000cfb0000413d0000000007050433000000000707004b0000032b0000613d000000f807200210000005fd08000041000000000202004b0000000002070019000000000208601900000000070604330000063007700197000000000227019f0000000000260435000000400600043d0000062f0260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000006330800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e590000413d0000008007200270000006310820009c000000000702a019000006310820009c0000000008000019000000100800203900000008098001bf000005fe0a70009c00000000080920190000004009700270000005fe0a70009c000000000709201900000004098001bf000005f50a70009c00000000080920190000002009700270000005f50a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000005fe0b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d5c0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d540000413d000000000a00004b00000d5e0000613d000000000a070433000000000a0a004b0000032b0000613d000000000a090433000006300aa00197000000f80b800210000000000aab019f000006320aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e760000013d000000400600043d0000062f0760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d790000413d0000000008060433000000000808004b0000032b0000613d000000f808300210000005fd09000041000000000303004b0000000003080019000000000309601900000000080704330000063008800197000000000338019f0000000000370435000000400700043d0000062f0370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000633090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f8b0000413d0000008008300270000006310930009c000000000803a019000006310930009c00000000090000190000001009002039000000080a9001bf000005fe0b80009c00000000090a2019000000400a800270000005fe0b80009c00000000080a2019000000040a9001bf000005f50b80009c00000000090a2019000000200a800270000005f50b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000005fe0ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000dda0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000dd20000413d000000000b00004b00000ddc0000613d000000000b080433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c900210000000000bbc019f000006320bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fa80000013d000005f504000041000005f50520009c00000000020480190000004002200210000005f50530009c00000000030480190000006003300210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000900000003001d000000000301004b00000e290000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f5e0000c13d000000000201004b000011550000c13d000000400400043d000b00000004001d0000060b0100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e490000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e410000413d000000000604004b00000e040000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e040000013d000000400700043d0000062f0870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e630000413d0000000009070433000000000909004b0000032b0000613d000000f809200210000005fd0a000041000000000202004b000000000209001900000000020a601900000000090804330000063009900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e830000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e7c0000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e920000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e8b0000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000ea10000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000e9a0000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eb00000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000ea90000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ebf0000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000eb80000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ece0000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ec70000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000005fe0450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000013f70000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000014750000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000014750000013d000000380210008c000010690000413d0000002002100270000005f50310009c00000000030100190000000003022019000005f50210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d0000062f0440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f460000413d00000004040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f00000634044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010860000013d000000000201004b00000f750000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006270000613d00000009010000290000000001010433000000000201004b000000430000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a410000613d000000430000013d000000400800043d0000062f0980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f950000413d000000000a080433000000000a0a004b0000032b0000613d000000f80a300210000005fd0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000006300aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fb50000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fae0000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fc40000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fbd0000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fd30000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fcc0000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fe20000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fdb0000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ff10000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000fea0000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b000010000000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b00000ff90000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b0000100f0000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010080000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000005fe0450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000014290000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000015080000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000015080000013d000000400200043d000400000002001d0000062f0220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000010750000413d00000004030000290000000003030433000000000303004b0000032b0000613d000000f80110021000000000030204330000063003300197000000000113019f000005fd01100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000010fb0000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b000005fd04000041000000000659004b00000000060000190000000006048019000005fd05500197000005fd07900197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000005fe0a20009c0000010d0000213d00000000032300490000002009900039000005fd0a000041000000000b39004b000000000b000019000000000b0a2019000005fd03300197000005fd09900197000000000c39004b000000000a008019000000000339013f000005fd0330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d0000000003450019000000000363001900000000037300190000000003830019000000000223001900000000030104330000000002320019000005fe02200197000000380320008c0000119d0000413d0000002003200270000005f50420009c00000000040200190000000004032019000005f50320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d0000062f0560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010e50000413d0000000005060433000000000505004b0000032b0000613d00000000050404330000063005500197000000f807300210000000000557019f00000636055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011b70000013d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000800210008c000011600000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000442043600000021053000390000000505500272000011420000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000113a0000413d000000000500004b000011440000613d0000000005020433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c0000000001002019000000210320003900000000001304350000117d0000013d000005f5020000410000000704000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000116a0000413d0000000004020433000000000404004b0000032b0000613d000000f804100210000005fd05000041000000000101004b0000000001040019000000000105601900000000040304330000063004400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b0000118a0000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b000011830000413d0000000002430019000006410400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000005fe0420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f00000002020003670000108e0000013d000000400600043d0000062f0360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011a70000413d0000000004060433000000000404004b0000032b0000613d000000f80220021000000000040304330000063004400197000000000242019f0000063502200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b000005fd07000041000000000854004b00000000080000190000000008078019000005fd05500197000005fd09400197000000000a59004b0000000007008019000000000559013f000005fd0550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000005fe0340009c0000010d0000213d00000000024200490000002005500039000005fd03000041000000000725004b00000000070000190000000007032019000005fd02200197000005fd08500197000000000928004b0000000003008019000000000228013f000005fd0220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011ef0000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011e80000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b000012000000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000011f80000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b000012110000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012090000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b000012220000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000121a0000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b000012330000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000122b0000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b000012440000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000123c0000413d0000000008870019000000000008043500000000066700190000001f0740018f000000200860003900000002055003670000000509400272000012550000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000124d0000413d000000000a07004b000012640000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b000012720000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b0000126b0000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005f501000041000005f50430009c000000000301801900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000b01000029000000e4021000390000000201000367000000000221034f000000000202043b000005ff02200198000012ba0000c13d0000000b03000029000000a402300039000000000221034f0000006403300039000000000331034f000000000303043b000000000402043b00000000523400a9000000000504004b000012ac0000613d00000000544200d9000000000334004b000012b40000c13d0000000b030000290000012403300039000000000131034f000000000101043b000000000121001a000700000001001d000012b40000413d000012bf0000013d0000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000b020000290000012402200039000000000121034f000000000101043b000700000001001d0000064201000041000000000010043900000008010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c70000800a0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b0000000702000029000000000112004b000012e60000a13d000000400100043d00000064021000390000064a03000041000000000032043500000044021000390000064b0300004100000000003204350000002402100039000000220300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d10001043000000000030000310000000b020000290000000001230049000000230410008a000001e4022000390000000201000367000000000221034f000000000202043b000005fd05000041000000000642004b00000000060000190000000006058019000005fd04400197000005fd07200197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000002420019000000000121034f000000000101043b000005fe0410009c0000010d0000213d00000000041300490000002005200039000005fd02000041000000000645004b00000000060000190000000006022019000005fd04400197000005fd07500197000000000847004b0000000002008019000000000447013f000005fd0440009c000000000206c019000000000202004b0000010d0000c13d0000003f02100039000000200400008a000000000442016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000005fe0740009c0000012b0000213d00000001066001900000012b0000c13d000000400040043f00000000041204360000000006510019000000000336004b0000010d0000213d0000001f0310018f000000020550036700000005061002720000132f0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000013270000413d000000000703004b0000133e0000613d0000000506600210000000000565034f00000000066400190000000303300210000000000706043300000000073701cf000000000737022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000373019f0000000000360435000000000114001900000000000104350000000001020433000000410110008c0000135c0000c13d00000041012000390000000001010433000000ff0310018f0000001d0130008a000000030500008a000000000151004b0000136e0000213d000000400100043d0000004402100039000006490300004100000000003204350000002402100039000000160300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000000404043300000040012000390000000002010433000000400100043d000006440520009c000013850000413d0000004402100039000006480300004100000000003204350000002402100039000000090300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000600510003900000000002504350000004002100039000000000042043500000020021000390000000000320435000000090200002900000000002104350000000000000435000005f5020000410000000003000414000005f50430009c0000000003028019000005f50410009c00000000010280190000004001100210000000c002300210000000000112019f00000645011001c7000000010200003917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000013ab0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000013a40000413d000000000605004b000013b90000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000013d10000613d0000000001000433000005ff011001970000000802000029000000000221004b0000000002000019000000010200c039000000000101004b0000000001000019000000010100603900000000011201a00000064601000041000000000100c019000000400200043d0000000000120435000005f501000041000005f50320009c0000000001024019000000400110021000000647011001c7000017d00001042e000000400200043d0000001f0430018f0000000503300272000013de0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d60000413d000000000504004b000013ed0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000380760008c0000145b0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014120000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000014750000013d000000380760008c000014ee0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014440000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000015080000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014640000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000147f0000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000159c0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000014d80000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015b50000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014f70000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000015120000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000165f0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000156b0000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000016780000013d0000001f0430018f00000005023002720000158c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015850000413d000000000504004b0000159a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015a50000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000005fd0a000041000000000b83004b000000000b000019000000000b0a8019000005fd08800197000005fd0c300197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009300039000005fd03000041000000000a49004b000000000a000019000000000a032019000005fd04400197000005fd0b900197000000000c4b004b000000000300801900000000044b013f000005fd0440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d00000020043000390000062a0a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000015ed0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015e60000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000015fc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000015f50000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b0000160b0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016040000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a8002720000161c0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016140000413d000000000b06004b0000162b0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000016390000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016320000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000005fe0510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005f501000041000005f50240009c0000000002010019000000000204401900000040022002100000000003030433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000016680000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000005fd0a000041000000000b82004b000000000b000019000000000b0a8019000005fd08800197000005fd0c200197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009200039000005fd02000041000000000a49004b000000000a000019000000000a022019000005fd04400197000005fd0b900197000000000c4b004b000000000200801900000000044b013f000005fd0440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006370a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b000016b00000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000016a90000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b000016bf0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000016b80000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b000016ce0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016c70000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000016df0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016d70000413d000000000b06004b000016ee0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000016fc0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016f50000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000005fe0510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005f501000041000005f50340009c0000000003010019000000000304401900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d0003000000000002000000040100008a0000000003100031000005fd010000410000005f0230008c00000000020000190000000002012019000005fd04300197000000000504004b0000000001008019000005fd0440009c000000000102c019000000000101004b000017680000613d00000002010003670000004402100370000000000202043b000005fe0420009c000017680000213d0000000003230049000005fd04000041000002600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b000017680000c13d0000000003000411000080010330008c000017660000c13d0000000003000412000005ff033001970000000004000410000000000343004b000017660000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000176a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005f502000041000005f50310009c0000000001028019000000c001100210000080010200003917cf17bb0000040f000000010300002900030000000103550000006001100270000105f50010019d000000200130011a00000001012001950000000101200190000017820000613d0000000001000019000017d00001042e0000000001000019000017d10001043000000000431200a900000000422300d9000000000112004b000017970000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000017570000613d000005f502000041000005f50410009c0000000001028019000000c00110021000000637011001c700008009020000390000800104000039000000000500001917cf17bb0000040f0000000003000415000000020330008a00000020033000c90000175f0000013d000000400100043d00000064021000390000064e03000041000000000032043500000044021000390000064f0300004100000000003204350000002402100039000000250300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d1000104300000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000001000412000005ff011001970000000002000410000000000121004b000017a60000c13d0000000001000411000080010110008c000017a80000613d000000000001042d0000000001000019000017d00001042e0000064c0100004100000000001004350000000101000039000000040010043f0000064d01000041000017d100010430000000000403004b000017b80000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b10000413d00000000012300190000000000010435000000000001042d000017be002104210000000102000039000000000001042d0000000002000019000000000001042d000017c3002104230000000102000039000000000001042d0000000002000019000000000001042d000017c8002104210000000102000039000000000001042d0000000002000019000000000001042d000017cd002104230000000102000039000000000001042d0000000002000019000000000001042d000017cf00000432000017d00001042e000017d1000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f190100000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000202bcce7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f722032380000000000000000000075650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f7065966802eaf4c7f1c9550c6463b3beb7b9087e1a4d7428d44371ae2340d9c02dec", + "deployedBytecode": "0x0004000000000002000b00000000000200000000030100190000006003300270000005f50430019700030000004103550002000000010355000005f50030019d000100000000001f0000008005000039000000400050043f0000000101200190000000390000c13d0000000002000031000000040120008c000000410000413d0000000201000367000000000301043b000000e003300270000005f70430009c000000450000a13d000005f80430009c000000a90000613d000005f90430009c000000ea0000613d000005fa0330009c000000a60000c13d000000040220008a000005fd03000041000000200420008c00000000040000190000000004034019000005fd05200197000000000605004b000000000300a019000005fd0550009c000000000304c019000000000303004b0000010d0000c13d0000000401100370000000000101043b000005fe0310009c0000010d0000213d0000000001120049000005fd02000041000002600310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b000000430000613d0000010d0000013d0000000001000416000000000101004b0000010d0000c13d000000200100003900000100001004430000012000000443000005f601000041000017d00001042e000000000102004b000000a60000c13d0000000001000019000017d00001042e000005fb0430009c000000eb0000613d000005fc0330009c000000a60000c13d000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000005fe0430009c0000010d0000213d00000004053000390000000004520049000005fd06000041000002600740008c00000000070000190000000007064019000005fd04400197000000000804004b000000000600a019000005fd0440009c00000000040700190000000004066019000000000404004b0000010d0000c13d0000000004000411000080010440008c000000430000c13d0000000004000412000005ff064001970000000004000410000000000646004b000000430000c13d0000022406300039000000000661034f0000000007320049000000230770008a000000000606043b000005fd08000041000000000976004b00000000090000190000000009088019000005fd07700197000005fd0a600197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005560019000000000651034f000000000606043b000005fe0760009c0000010d0000213d00000000076200490000002002500039000005fd08000041000000000972004b00000000090000190000000009082019000005fd07700197000005fd0a200197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d000000030760008c000002230000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000003a01000039000000a40010043f0000062301000041000000c40010043f0000062401000041000000e40010043f0000062201000041000017d10001043017cf179d0000040f0000000001000019000017d00001042e000000040320008a000005fd04000041000000600630008c00000000060000190000000006044019000005fd03300197000000000703004b000000000400a019000005fd0330009c00000000030600190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000703043b000005fe0370009c0000010d0000213d00000004067000390000000003620049000005fd04000041000002600830008c00000000080000190000000008044019000005fd03300197000000000903004b000000000400a019000005fd0330009c00000000030800190000000003046019000000000303004b0000010d0000c13d0000000003000411000080010330008c000000430000c13d0000000003000412000005ff033001970000000004000410000000000343004b000000430000c13d0000012403700039000000000331034f0000004404700039000000000441034f000000000404043b000005ff04400197000000000303043b000006000830009c000001310000413d00000044015000390000060a0200004100000000002104350000002401500039000000080200003900000000002104350000060b010000410000000000150435000000040150003900000020020000390000000000210435000005f501000041000005f50250009c000000000105401900000040011002100000060c011001c7000017d10001043017cf17220000040f000000040320008a000005fd04000041000000600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b0000010d0000c13d0000004403100370000000000303043b000b00000003001d000005fe0330009c0000010d0000213d0000000b030000290000000403300039000a00000003001d0000000002320049000005fd03000041000002600420008c00000000040000190000000004034019000005fd02200197000000000502004b000000000300a019000005fd0220009c00000000020400190000000002036019000000000202004b0000010f0000613d0000000001000019000017d1000104300000002401100370000000000101043b000900000001001d0000000001000411000080010110008c000000430000c13d0000000001000412000005ff011001970000000002000410000800000002001d000000000121004b000000430000c13d0000000002000414000000400100043d0000002003100039000006250400004100000000004304350000000b030000290000010403300039000700000003001d0000000203300367000000000303043b0000002404100039000000000034043500000024030000390000000000310435000006260310009c0000015e0000413d0000064c0100004100000000001004350000004101000039000000040010043f0000064d01000041000017d100010430000001c405700039000000000551034f0000000007720049000000230770008a000000000505043b000005fd08000041000000000975004b00000000090000190000000009088019000005fd07700197000005fd0a500197000000000b7a004b000000000800801900000000077a013f000005fd0770009c00000000070900190000000007086019000000000707004b0000010d0000c13d0000000005650019000000000151034f000000000601043b000005fe0160009c0000010d0000213d00000000016200490000002002500039000005fd05000041000000000712004b00000000070000190000000007052019000005fd01100197000005fd08200197000000000918004b0000000005008019000000000118013f000005fd0110009c00000000010700190000000001056019000000000101004b0000010d0000c13d0000000001000414000006010510009c000002360000413d000000400500043d000000d90000013d0000006003100039000000400030043f0000000004010433000006010540009c000001740000413d0000060b020000410000000000230435000000a4021000390000060a040000410000000000420435000000840210003900000008040000390000000000420435000000640110003900000020020000390000000000210435000005f501000041000005f50230009c000000000103401900000040011002100000060c011001c7000017d100010430000000c0022002100000060702200197000000400110021000000627011000410000062801100197000000000112019f00000060024002100000062902200197000000000121019f0000062a011001c70000800302000039000000000300001900000000040000190000000005000019000000000600001917cf17bb0000040f00030000000103550000006001100270000105f50010019d000005f5041001970000003f014000390000062b05100197000000400100043d0000000003150019000000000553004b00000000050000190000000105004039000005fe0630009c0000012b0000213d00000001055001900000012b0000c13d000000400030043f00000000034104360000001f054000390000000505500272000001a30000613d00000000060000310000000206600367000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000019b0000413d000000000500004b000001a50000613d0000000105000031000000000554004b0000010d0000213d00000003060003670000001f0540018f0000000504400272000001b50000613d000000000700001900000005087002100000000009830019000000000886034f000000000808043b00000000008904350000000107700039000000000847004b000001ad0000413d000000000705004b000001c40000613d0000000504400210000000000646034f00000000044300190000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000102200190000002640000613d0000000901000029000000000101004b000012980000c13d00000002010003670000000a02000029000000000221034f000000000202043b000000000302004b000002c90000c13d0000000702000029000000000121034f000000000101043b000000800210008c000003140000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c000000000200001900000001020020390000000002230019000000200300008a0000004104200039000000000334016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f000000020320003900000009040000290000000003340436000000210420003900000005044002720000020e0000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002060000413d000000000400004b000002100000613d00000009040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c00000000010020190000000902000029000000210220003900000000001204350000046c0000013d000000000221034f000000000202043b00000602022001970000060d0720009c0000026e0000c13d000000430260008c000002ab0000213d0000060b01000041000000800010043f0000002001000039000000840010043f0000004001000039000000a40010043f0000062001000041000000c40010043f0000062101000041000000e40010043f0000062201000041000017d1000104300000000207000367000080060540008c00000000050000190000024b0000c13d000000040560008c00000000050000190000024b0000413d000000000827034f0000000105000039000000000808043b0000060208800197000006030980009c0000024a0000613d000006040980009c0000024a0000613d000006050980009c0000024a0000613d000006060580009c00000000050000190000000105006039000000010550018f0000000008260019000005f502200197000000000227034f000000000703004b0000027a0000c13d000000000368004b000012b40000413d0000000003000031000000000683004b000012b40000413d00000608060000410000060907000041000000000505004b00000000050600190000000005076019000000c0011002100000060701100197000000000115019f0000000003830049000005f50330019700000000023203df00000000011203af000000000204001917cf17c50000040f000002890000013d0000000001010433000005f502000041000005f50410009c0000000001028019000005f50430009c000000000203401900000040022002100000006001100210000000000121019f000017d1000104300000060e0120009c000000430000613d0000060b01000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000060f01000041000000c40010043f0000061001000041000017d100010430000000000668004b000012b40000413d0000000006000031000000000786004b000012b40000413d0000000006860049000005f50660019700000000026203df000000c001100210000006070110019700000608011001c700000000011203af0000800902000039000000000600001917cf17c50000040f000300000001035500000000030100190000006003300270000105f50030019d000005f5033001970000000102200190000000430000c13d0000001f0430018f00000005023002720000029b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000002940000413d000000000504004b000002a90000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d1000104300000002402500039000000000221034f000000000202043b000b00000002001d000005ff0220009c0000010d0000213d000000e402300039000000000221034f0000004403500039000000000131034f000000000101043b000a00000001001d000000000102043b0000061102000041000000800020043f000005ff02400197000800000002001d000000840020043f000005ff01100197000900000001001d000000a40010043f00000000010004140000000b02000029000000040220008c0000038d0000c13d0000000103000031000000200130008c00000020040000390000000004034019000003b90000013d000000710320008c000003310000c13d000000230200008a0000000b030000290000000004320049000001c402300039000000000221034f000000000302043b0000000002000031000900000004001d0000000004420019000005fd05000041000000000643004b00000000060000190000000006058019000005fd04400197000005fd07300197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000003430019000000000131034f000000000101043b000005fe0410009c0000010d0000213d00000000021200490000002003300039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000006010520009c000007d00000413d000000400100043d00000044021000390000060a0300004100000000003204350000002402100039000000080300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400200043d000900000002001d0000062f0220009c0000012b0000213d00000009030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000003200000413d00000009030000290000000003030433000000000303004b000004630000c13d0000064c0100004100000000001004350000003201000039000000040010043f0000064d01000041000017d100010430000000020120008c000003e10000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000005a70000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000037a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000003720000413d000000000500004b0000037c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000005c40000013d000005f502000041000005f50310009c0000000001028019000000c00110021000000612011001c70000000b0200002917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003a60000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000039e0000413d000000000705004b000003b50000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000043d0000613d0000001f01400039000000600410018f00000080014001bf000000400010043f000000200230008c0000010d0000413d000000800200043d0000000a03000029000000000232004b000000430000813d000000a00240003900000613030000410000000000320435000000a40340003900000009050000290000000000530435000000c40340003900000000000304350000004403000039000300000003001d00000000003104350000014003400039000000400030043f00000120054000390000061403000041000500000005001d000000000035043500000100044001bf0000002003000039000600000003001d000400000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c0000053d0000c13d000000010200003900000001010000310000054e0000013d000000010120008c000004bd0000c13d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000201043b000000800120008c000006390000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f00000002043000390000000004410436000000210530003900000005055002720000042a0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004220000413d000000000500004b0000042c0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000006560000013d000000400200043d0000001f0430018f00000005033002720000044a0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004420000413d000000000504004b000004590000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f00000000001204350000000b01000029000000a4011000390000000201100367000000000201043b000000800120008c000004cf0000413d0000008001200270000006310320009c000000000102a019000006310320009c0000000003000019000000100300203900000008043001bf000005fe0510009c00000000030420190000004004100270000005fe0510009c000000000104201900000004043001bf000005f50510009c00000000030420190000002004100270000005f50510009c000000000104201900000002043001bf0000ffff0510008c000000000304201900000010041002700000000001042019000000ff0110008c000000000100001900000001010020390000000003130019000000200100008a0000004104300039000000000414016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000441043600000021053000390000000505500272000004aa0000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b000004a20000413d000000000500004b000004ac0000613d0000000005010433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000023201cf000000ff0330008c000000000200201900000021031000390000000000230435000004ec0000013d000000400100043d00000044021000390000062c0300004100000000003204350000002402100039000000170300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000004d90000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f00000000002304350000000b0200002900000064022000390000000202200367000000000302043b000000800230008c000006a60000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f00000002054000390000000005520436000000210640003900000005066002720000052a0000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005220000413d000000000600004b0000052c0000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c000000000300201900000021042000390000000000340435000006c30000013d000005f504000041000005f50530009c000000000304801900000060033002100000004002200210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000700000003001d000000000301004b000005770000c13d00000007010000290000000031010434000200000003001d000000000202004b000006140000c13d000000000201004b000007570000c13d000000400400043d000b00000004001d0000060b01000041000000000014043500000004014000390000000602000029000000000021043500000004010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000050100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000700000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000007030000290000000001130436000000030300036700000001050000310000001f0450018f0000000505500272000005970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000058f0000413d000000000604004b000005520000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000005520000013d000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000005b10000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000302043b000000800230008c000007620000413d0000008002300270000006310430009c000000000203a019000006310430009c0000000004000019000000100400203900000008054001bf000005fe0620009c00000000040520190000004005200270000005fe0620009c000000000205201900000004054001bf000005f50620009c00000000040520190000002005200270000005f50620009c000000000205201900000002054001bf0000ffff0620008c000000000405201900000010052002700000000002052019000000ff0220008c000000000200001900000001020020390000000004240019000000200200008a0000004105400039000000000525016f000000400200043d0000000005520019000000000625004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000552043600000021064000390000000506600272000006010000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b000005f90000413d000000000600004b000006030000613d0000000006020433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000034301cf000000ff0440008c0000000003002019000000210420003900000000003404350000077f0000013d000000000201004b00000a2c0000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b00000a280000c13d000000400100043d00000044021000390000061f03000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d0000062f0310009c0000012b0000213d0000004003100039000000400030043f0000000103000039000000000331043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a000006430000413d0000000004010433000000000404004b0000032b0000613d000000f804200210000005fd05000041000000000202004b0000000002040019000000000205601900000000040304330000063004400197000000000224019f000000000023043500000007020000290000000202200367000000000202043b000000800320008c000009ba0000413d0000008003200270000006310420009c000000000302a019000006310420009c0000000004000019000000100400203900000008054001bf000005fe0630009c00000000040520190000004005300270000005fe0630009c000000000305201900000004054001bf000005f50630009c00000000040520190000002005300270000005f50630009c000000000305201900000002054001bf0000ffff0630008c000000000405201900000010053002700000000003052019000000ff0330008c000000000300001900000001030020390000000004340019000000200300008a0000004105400039000000000535016f000000400300043d0000000005530019000000000635004b00000000060000190000000106004039000005fe0750009c0000012b0000213d00000001066001900000012b0000c13d000000400050043f0000000205400039000000000553043600000021064000390000000506600272000006930000613d0000000007000031000000020770036700000000080000190000000509800210000000000a950019000000000997034f000000000909043b00000000009a04350000000108800039000000000968004b0000068b0000413d000000000600004b000006950000613d0000000006030433000000000606004b0000032b0000613d00000000060504330000063006600197000000f807400210000000000667019f000006320660004100000000006504350000000304400210000000f80440008900000000024201cf000000ff0440008c000000000200201900000021043000390000000000240435000009d70000013d000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000006b00000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f0000000000340435000000400300043d000700000003001d00000020043000390000000003010433000000000503004b000006d10000613d000000000500001900000000064500190000002005500039000000000715001900000000070704330000000000760435000000000635004b000006ca0000413d000000000143001900000000000104350000000004020433000000000504004b000006de0000613d000000000500001900000000061500190000002005500039000000000725001900000000070704330000000000760435000000000645004b000006d70000413d000000000114001900000000000104350000000001340019000000070300002900000000001304350000003f01100039000000200200008a000300000002001d000000000121016f0000000002310019000000000112004b00000000010000190000000101004039000600000002001d000005fe0220009c0000012b0000213d00000001011001900000012b0000c13d0000000601000029000000400010043f0000062f0110009c0000012b0000213d0000000b0400002900000044014000390000000201100367000000000101043b00000006050000290000004002500039000000400020043f0000002002500039000006330300004100000000003204350000001502000039000000000025043500000021025000390000006001100210000000000012043500000124014000390000000201100367000000000101043b000000800210008c00000bc80000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000223001900000041032000390000000304000029000000000343016f000000400400043d0000000003340019000500000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000002032000390000000504000029000000000334043600000021042000390000000504400272000007420000613d00000000050000310000000205500367000000000600001900000005076002100000000008730019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000073a0000413d000000000400004b000007440000613d00000005040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f000006320440004100000000004304350000000302200210000000f80220008900000000012101cf000000ff0220008c000000000100201900000005020000290000002102200039000000000012043500000be80000013d000005f5020000410000000204000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0420009c0000012b0000213d0000004004200039000000400040043f0000000104000039000000000442043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a0000076c0000413d0000000005020433000000000505004b0000032b0000613d000000f805300210000005fd06000041000000000303004b0000000003050019000000000306601900000000050404330000063005500197000000000335019f00000000003404350000000b03000029000000c4033000390000000203300367000000000303043b000000800430008c00000a690000413d0000008004300270000006310530009c000000000403a019000006310530009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f0000000206500039000000000664043600000021075000390000000507700272000007bd0000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b000007b50000413d000000000700004b000007bf0000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000035301cf000000ff0550008c00000000030020190000002105400039000000000035043500000a860000013d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f5033001970003000000010355000000010220019000000ad70000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000007fb0000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000007f30000413d000000000400004b000007fd0000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f00000005033002720000080d0000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008050000413d000000000604004b0000081c0000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000004000031000000090200002900000000052400190000000b0200002900000204032000390000000202000367000000000332034f000000000303043b000005fd06000041000000000753004b00000000070000190000000007068019000005fd05500197000005fd08300197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000505004b0000010d0000c13d0000000001010433000600000001001d0000000a010000290000000001130019000000000312034f000000000503043b000005fe0350009c0000010d0000213d000000050350021000000000043400490000002006100039000005fd01000041000000000746004b00000000070000190000000007012019000005fd04400197000005fd08600197000000000948004b0000000001008019000000000448013f000005fd0440009c000000000107c019000000000101004b0000010d0000c13d000000400100043d000000200410003900000638055001980000085b0000613d000000000262034f000000000600001900000005076002100000000008740019000000000772034f000000000707043b00000000007804350000000106600039000000000756004b000008530000413d000000000200004b0000085d0000613d00000000003104350000003f02300039000000200300008a000000000232016f0000000002210019000000000312004b00000000030000190000000103004039000005fe0520009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f000005f502000041000005f50340009c0000000003020019000000000304401900000040033002100000000001010433000005f50410009c00000000010280190000006001100210000000000131019f0000000003000414000005f50430009c0000000002034019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d0000000002000031000000090300002900000000053200190000000b0300002900000224043000390000000203000367000000000443034f000000000404043b000005fd06000041000000000754004b00000000070000190000000007068019000005fd05500197000005fd08400197000000000958004b0000000006008019000000000558013f000005fd0550009c00000000050700190000000005066019000000000101043b000900000001001d000000000105004b0000010d0000c13d0000000a010000290000000004140019000000000143034f000000000101043b000005fe0310009c0000010d0000213d00000000021200490000002003400039000005fd04000041000000000523004b00000000050000190000000005042019000005fd02200197000005fd06300197000000000726004b0000000004008019000000000226013f000005fd0220009c00000000020500190000000002046019000000000202004b0000010d0000c13d0000000002000414000000000131001a000005f504300197000012b40000413d0000000003000031000000000513004b000012b40000413d0000000204400367000005f50520009c000003020000213d0000000001130049000005f50110019700000000011403df000000c002200210000006070220019700000609022001c700000000012103af000080100200003917cf17ca0000040f00000000030100190000006003300270000105f50030019d000005f50330019700030000000103550000000102200190000015810000613d0000003f013000390000062b01100197000000400200043d0000000001120019000000000421004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f00000000013204360000001f043000390000000504400272000008e10000613d00000000050000310000000205500367000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000008d90000413d000000000400004b000008e30000613d0000000104000031000000000443004b0000010d0000213d00000003050003670000001f0430018f0000000503300272000008f30000613d000000000600001900000005076002100000000008710019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000008eb0000413d000000000604004b000009020000613d0000000503300210000000000535034f00000000033100190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000002020433000000200220008c00000cdf0000c13d0000000b0a0000290000006402a000390000000203000367000000000523034f0000004402a00039000000000423034f0000002402a00039000000000623034f0000008402a00039000000a407a00039000000c408a00039000000e409a00039000001240aa00039000000000aa3034f000000070b000029000000000bb3034f000000000993034f000000000883034f000000000773034f000000000c23034f0000000a02000029000000000223034f000000000202043b000000000306043b000000000404043b000000000505043b00000000060c043b000000000707043b000000000808043b000000000909043b000000000b0b043b000000000a0a043b000000000c010433000000400100043d000001c00d1000390000000000cd0435000001a00c100039000000090d0000290000000000dc0435000001800c100039000000060d0000290000000000dc0435000001600c1000390000000000ac0435000001400a1000390000000000ba0435000001200a10003900000000009a043500000100091000390000000000890435000000e0081000390000000000780435000000c0071000390000000000670435000000a006100039000000000056043500000080051000390000000000450435000000600410003900000000003404350000004003100039000000000023043500000020021000390000063a030000410000000000320435000001c00300003900000000003104350000063b0310009c0000012b0000213d000001e003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000700000001001d000000400100043d000900000001001d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d00000009040000290000002002400039000000000101043b0000063c0300004100000000003204350000008003400039000000000013043500000060014000390000063d03000041000000000031043500000040014000390000063e030000410000000000310435000000800100003900000000001404350000063f0140009c0000012b0000213d0000000904000029000000a001400039000000400010043f000005f501000041000005f50320009c000000000201801900000040022002100000000003040433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000301043b000000400100043d00000042021000390000000704000029000000000042043500000020021000390000064004000041000000000042043500000022041000390000000000340435000000420300003900000000003104350000061b0310009c0000012b0000213d0000008003100039000000400030043f000005f503000041000005f50420009c000000000203801900000040022002100000000001010433000005f50410009c00000000010380190000006001100210000000000121019f0000000002000414000005f50420009c0000000002038019000000c002200210000000000112019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400300043d0000062f0430009c0000012b0000213d0000004004300039000000400040043f0000000104000039000000000443043600000000050000310000000205500367000000000600001900000005076002100000000008740019000000000775034f000000000707043b0000000000780435000000010660003a000009c40000413d0000000005030433000000000505004b0000032b0000613d000000f805200210000005fd06000041000000000202004b0000000002050019000000000206601900000000050404330000063005500197000000000225019f00000000002404350000000b02000029000000a4022000390000000202200367000000000202043b000000800420008c00000b5a0000413d0000008004200270000006310520009c000000000402a019000006310520009c0000000005000019000000100500203900000008065001bf000005fe0740009c00000000050620190000004006400270000005fe0740009c000000000406201900000004065001bf000005f50740009c00000000050620190000002006400270000005f50740009c000000000406201900000002065001bf0000ffff0740008c000000000506201900000010064002700000000004062019000000ff0440008c000000000400001900000001040020390000000005450019000000200400008a0000004106500039000000000646016f000000400400043d0000000006640019000000000746004b00000000070000190000000107004039000005fe0860009c0000012b0000213d00000001077001900000012b0000c13d000000400060043f000000020650003900000000066404360000002107500039000000050770027200000a150000613d000000000800003100000002088003670000000009000019000000050a900210000000000ba60019000000000aa8034f000000000a0a043b0000000000ab04350000000109900039000000000a79004b00000a0d0000413d000000000700004b00000a170000613d0000000007040433000000000707004b0000032b0000613d00000000070604330000063007700197000000f808500210000000000778019f000006320770004100000000007604350000000305500210000000f80550008900000000025201cf000000ff0550008c00000000020020190000002105400039000000000025043500000b770000013d00000007010000290000000001010433000000000201004b00000a560000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000002010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a560000c13d000000400100043d00000064021000390000061d03000041000000000032043500000044021000390000061e03000041000000000032043500000024021000390000002a0300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400300043d00000024013000390000000902000029000000000021043500000611010000410000000000130435000700000003001d00000004013000390000000802000029000000000021043500000000010004140000000b02000029000000040220008c00000af20000c13d0000000103000031000000200130008c0000002004000039000000000403401900000b250000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000a730000413d0000000006040433000000000606004b0000032b0000613d000000f806300210000005fd07000041000000000303004b0000000003060019000000000307601900000000060504330000063006600197000000000336019f00000000003504350000000b03000029000000a4033000390000000203300367000000000303043b000000800530008c00000c5d0000413d0000008005300270000006310630009c000000000503a019000006310630009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000ac40000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000abc0000413d000000000800004b00000ac60000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000036301cf000000ff0660008c00000000030020190000002106500039000000000036043500000c7a0000013d0000001f0430018f000000050230027200000ae20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000adb0000413d000000000504004b00000af00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000005f502000041000005f50310009c00000000010280190000000704000029000005f50340009c00000000020440190000004002200210000000c001100210000000000121019f00000617011001c70000000b0200002917cf17c00000040f000000070a00002900000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000b110000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000b090000413d000000000705004b00000b210000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000c370000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000005fe0410009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000000200230008c0000010d0000413d00000007020000290000000002020433000000000202004b00000ccb0000c13d00000044021000390000000a030000290000000000320435000000200210003900000613030000410000000000320435000000240310003900000009040000290000000000430435000000030300002900000000003104350000061b0310009c0000012b0000213d0000008003100039000a00000003001d000000400030043f0000061c0310009c0000012b0000213d000000c003100039000000400030043f00000006030000290000000a040000290000000000340435000000a0041000390000061403000041000800000004001d0000000000340435000000000301043300000000010004140000000b04000029000000040440008c00000ded0000c13d0000000102000039000000010100003100000e000000013d000000400400043d0000062f0540009c0000012b0000213d0000004005400039000000400050043f0000000105000039000000000554043600000000060000310000000206600367000000000700001900000005087002100000000009850019000000000886034f000000000808043b0000000000890435000000010770003a00000b640000413d0000000006040433000000000606004b0000032b0000613d000000f806200210000005fd07000041000000000202004b0000000002060019000000000207601900000000060504330000063006600197000000000226019f00000000002504350000000b0200002900000064022000390000000202200367000000000202043b000000800520008c00000cf10000413d0000008005200270000006310620009c000000000502a019000006310620009c0000000006000019000000100600203900000008076001bf000005fe0850009c00000000060720190000004007500270000005fe0850009c000000000507201900000004076001bf000005f50850009c00000000060720190000002007500270000005f50850009c000000000507201900000002076001bf0000ffff0850008c000000000607201900000010075002700000000005072019000000ff0550008c000000000500001900000001050020390000000006560019000000200500008a0000004107600039000000000757016f000000400500043d0000000007750019000000000857004b00000000080000190000000108004039000005fe0970009c0000012b0000213d00000001088001900000012b0000c13d000000400070043f000000020760003900000000077504360000002108600039000000050880027200000bb50000613d00000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa00039000000000b8a004b00000bad0000413d000000000800004b00000bb70000613d0000000008050433000000000808004b0000032b0000613d00000000080704330000063008800197000000f809600210000000000889019f000006320880004100000000008704350000000306600210000000f80660008900000000026201cf000000ff0660008c00000000020020190000002106500039000000000026043500000d0e0000013d000000400200043d000500000002001d0000062f0220009c0000012b0000213d00000005030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a00000bd40000413d00000005030000290000000003030433000000000303004b0000032b0000613d000000f803100210000005fd04000041000000000101004b0000000001030019000000000104601900000000030204330000063003300197000000000113019f0000000000120435000000230100008a0000000b020000290000000004210049000001c4012000390000000202000367000200000001001d000000000112034f000000000101043b0000000003000031000100000004001d0000000004430019000005fd05000041000000000641004b00000000060000190000000006058019000005fd04400197000005fd07100197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000004410019000000000142034f000000000101043b000005fe0510009c0000010d0000213d00000000051300490000002003400039000005fd04000041000000000653004b00000000060000190000000006042019000005fd05500197000005fd07300197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d000000010410008c00000f280000c13d000000000132034f000000000101043b000000010200008a000005fd03000041000000000221004b00000000020000190000000002032019000005fd01100197000005fd0410009c0000000003008019000005fd01100167000005fd0110009c000000000102001900000000010360190000006002000039000400000002001d000000000101004b000010860000c13d000000400100043d000400000001001d0000062f0110009c0000012b0000213d00000004030000290000004001300039000000400010043f00000020013000390000063202000041000000000021043500000001010000390000000000130435000010860000013d000000400200043d0000001f0430018f000000050330027200000c440000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000c3c0000413d000000000504004b00000c530000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000c670000413d0000000007050433000000000707004b0000032b0000613d000000f807300210000005fd08000041000000000303004b0000000003070019000000000308601900000000070604330000063007700197000000000337019f00000000003604350000000b0300002900000064033000390000000203300367000000000303043b000000800630008c00000d6f0000413d0000008006300270000006310730009c000000000603a019000006310730009c0000000007000019000000100700203900000008087001bf000005fe0960009c00000000070820190000004008600270000005fe0960009c000000000608201900000004087001bf000005f50960009c00000000070820190000002008600270000005f50960009c000000000608201900000002087001bf0000ffff0960008c000000000708201900000010086002700000000006082019000000ff0660008c000000000600001900000001060020390000000007670019000000200600008a0000004108700039000000000868016f000000400600043d0000000008860019000000000968004b00000000090000190000000109004039000005fe0a80009c0000012b0000213d00000001099001900000012b0000c13d000000400080043f000000020870003900000000088604360000002109700039000000050990027200000cb80000613d000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb00039000000000c9b004b00000cb00000413d000000000900004b00000cba0000613d0000000009060433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f000006320990004100000000009804350000000307700210000000f80770008900000000037301cf000000ff0770008c00000000030020190000002107600039000000000037043500000d8c0000013d0000006402100039000006180300004100000000003204350000004402100039000006190300004100000000003204350000002402100039000000360300003900000000003204350000060b020000410000000000210435000000040210003900000006030000290000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d100010430000000400100043d00000044021000390000063903000041000000000032043500000024021000390000001f0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400500043d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000010600003900000000066504360000000007000031000000020770036700000000080000190000000509800210000000000a960019000000000997034f000000000909043b00000000009a0435000000010880003a00000cfb0000413d0000000007050433000000000707004b0000032b0000613d000000f807200210000005fd08000041000000000202004b0000000002070019000000000208601900000000070604330000063007700197000000000227019f0000000000260435000000400600043d0000062f0260009c0000012b0000213d0000000b0900002900000044029000390000000202200367000000000202043b0000004007600039000000400070043f0000002007600039000006330800004100000000008704350000001507000039000000000076043500000021076000390000006002200210000000000027043500000124029000390000000202200367000000000202043b000000800720008c00000e590000413d0000008007200270000006310820009c000000000702a019000006310820009c0000000008000019000000100800203900000008098001bf000005fe0a70009c00000000080920190000004009700270000005fe0a70009c000000000709201900000004098001bf000005f50a70009c00000000080920190000002009700270000005f50a70009c000000000709201900000002098001bf0000ffff0a70008c000000000809201900000010097002700000000007092019000000ff0770008c000000000700001900000001070020390000000008780019000000200700008a0000004109800039000000000979016f000000400700043d0000000009970019000000000a79004b000000000a000019000000010a004039000005fe0b90009c0000012b0000213d000000010aa001900000012b0000c13d000000400090043f00000002098000390000000009970436000000210a800039000000050aa0027200000d5c0000613d000000000b000031000000020bb00367000000000c000019000000050dc00210000000000ed90019000000000ddb034f000000000d0d043b0000000000de0435000000010cc00039000000000dac004b00000d540000413d000000000a00004b00000d5e0000613d000000000a070433000000000a0a004b0000032b0000613d000000000a090433000006300aa00197000000f80b800210000000000aab019f000006320aa000410000000000a904350000000308800210000000f80880008900000000028201cf000000ff0880008c00000000020020190000002108700039000000000028043500000e760000013d000000400600043d0000062f0760009c0000012b0000213d0000004007600039000000400070043f00000001070000390000000007760436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a00000d790000413d0000000008060433000000000808004b0000032b0000613d000000f808300210000005fd09000041000000000303004b0000000003080019000000000309601900000000080704330000063008800197000000000338019f0000000000370435000000400700043d0000062f0370009c0000012b0000213d0000000b0a0000290000004403a000390000000203300367000000000303043b0000004008700039000000400080043f000000200870003900000633090000410000000000980435000000150800003900000000008704350000002108700039000000600330021000000000003804350000012403a000390000000203300367000000000303043b000000800830008c00000f8b0000413d0000008008300270000006310930009c000000000803a019000006310930009c00000000090000190000001009002039000000080a9001bf000005fe0b80009c00000000090a2019000000400a800270000005fe0b80009c00000000080a2019000000040a9001bf000005f50b80009c00000000090a2019000000200a800270000005f50b80009c00000000080a2019000000020a9001bf0000ffff0b80008c00000000090a2019000000100a80027000000000080a2019000000ff0880008c000000000800001900000001080020390000000009890019000000200800008a000000410a900039000000000a8a016f000000400800043d000000000aa80019000000000b8a004b000000000b000019000000010b004039000005fe0ca0009c0000012b0000213d000000010bb001900000012b0000c13d0000004000a0043f000000020a900039000000000aa80436000000210b900039000000050bb0027200000dda0000613d000000000c000031000000020cc00367000000000d000019000000050ed00210000000000fea0019000000000eec034f000000000e0e043b0000000000ef0435000000010dd00039000000000ebd004b00000dd20000413d000000000b00004b00000ddc0000613d000000000b080433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c900210000000000bbc019f000006320bb000410000000000ba04350000000309900210000000f80990008900000000039301cf000000ff0990008c00000000030020190000002109800039000000000039043500000fa80000013d000005f504000041000005f50520009c00000000020480190000004002200210000005f50530009c00000000030480190000006003300210000000000223019f000005f50310009c0000000001048019000000c001100210000000000112019f0000000b0200002917cf17bb0000040f000000010220018f00030000000103550000006001100270000105f50010019d000005f5011001970000006003000039000900000003001d000000000301004b00000e290000c13d00000009010000290000000031010434000700000003001d000000000202004b00000f5e0000c13d000000000201004b000011550000c13d000000400400043d000b00000004001d0000060b0100004100000000001404350000000401400039000000060200002900000000002104350000000a010000290000000003010433000a00000003001d000000240140003900000000003104350000004402400039000000080100002917cf17ae0000040f0000000a010000290000001f01100039000000200200008a000000000121016f0000004401100039000005f502000041000005f50310009c00000000010280190000000b04000029000005f50340009c000000000204401900000040022002100000006001100210000000000121019f000017d100010430000005fe0310009c0000012b0000213d0000003f03100039000000200400008a000000000343016f000000400400043d0000000003340019000900000004001d000000000443004b00000000040000190000000104004039000005fe0530009c0000012b0000213d00000001044001900000012b0000c13d000000400030043f00000009030000290000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000e490000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000e410000413d000000000604004b00000e040000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000e040000013d000000400700043d0000062f0870009c0000012b0000213d0000004008700039000000400080043f0000000108000039000000000887043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a00000e630000413d0000000009070433000000000909004b0000032b0000613d000000f809200210000005fd0a000041000000000202004b000000000209001900000000020a601900000000090804330000063009900197000000000229019f0000000000280435000000400200043d00000020092000390000000008010433000000000a08004b00000e830000613d000000000a000019000000000b9a0019000000200aa00039000000000c1a0019000000000c0c04330000000000cb0435000000000b8a004b00000e7c0000413d00000000019800190000000000010435000000000128001900000020091000390000000008030433000000000a08004b00000e920000613d000000000a000019000000000b9a0019000000200aa00039000000000c3a0019000000000c0c04330000000000cb0435000000000b8a004b00000e8b0000413d00000000039800190000000000030435000000000118001900000020081000390000000003040433000000000903004b00000ea10000613d0000000009000019000000000a8900190000002009900039000000000b490019000000000b0b04330000000000ba0435000000000a39004b00000e9a0000413d00000000048300190000000000040435000000000113001900000020041000390000000003050433000000000803004b00000eb00000613d000000000800001900000000094800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000938004b00000ea90000413d00000000044300190000000000040435000000000113001900000020041000390000000003060433000000000503004b00000ebf0000613d000000000500001900000000084500190000002005500039000000000965001900000000090904330000000000980435000000000835004b00000eb80000413d00000000044300190000000000040435000000000113001900000020041000390000000003070433000000000503004b00000ece0000613d000000000500001900000000064500190000002005500039000000000875001900000000080804330000000000860435000000000635004b00000ec70000413d000000000443001900000000000404350000000001210049000000000113001900000000001204350000003f03100039000000200100008a000000000313016f0000000005230019000000000335004b00000000030000190000000103004039000005fe0450009c0000012b0000213d00000001033001900000012b0000c13d000000400050043f000000230300008a0000000b060000290000000004630049000001c4036000390000000207000367000000000637034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000013f70000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000014750000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000014750000013d000000380210008c000010690000413d0000002002100270000005f50310009c00000000030100190000000003022019000005f50210009c0000000002000019000000040200203900000002042001bf0000ffff0530008c000000000204201900000010043002700000000003042019000000ff0330008c00000000030000190000000103002039000000400400043d000400000004001d0000062f0440009c0000012b0000213d000000000232019f00000004040000290000004003400039000000400030043f0000000203200039000000000334043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a00000f460000413d00000004040000290000000004040433000000000404004b0000032b0000613d00000000040304330000063004400197000000f805200210000000000445019f00000634044001c700000000004304350000000302200210000000f80220008900000000012101cf000000040200002900000021022000390000000000120435000010860000013d000000000201004b00000f750000c13d000006150100004100000000001004390000000b010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c7000080020200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000000101004b000006270000613d00000009010000290000000001010433000000000201004b000000430000613d000005fd02000041000000200310008c00000000030000190000000003024019000005fd01100197000000000401004b000000000200a019000005fd0110009c00000000010300190000000001026019000000000101004b0000010d0000c13d00000007010000290000000001010433000000000201004b0000000002000019000000010200c039000000000221004b0000010d0000c13d000000000101004b00000a410000613d000000430000013d000000400800043d0000062f0980009c0000012b0000213d0000004009800039000000400090043f00000001090000390000000009980436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc90019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a00000f950000413d000000000a080433000000000a0a004b0000032b0000613d000000f80a300210000005fd0b000041000000000303004b00000000030a001900000000030b6019000000000a090433000006300aa0019700000000033a019f0000000000390435000000400300043d000000200a3000390000000009010433000000000b09004b00000fb50000613d000000000b000019000000000cab0019000000200bb00039000000000d1b0019000000000d0d04330000000000dc0435000000000c9b004b00000fae0000413d0000000001a9001900000000000104350000000001390019000000200a1000390000000009020433000000000b09004b00000fc40000613d000000000b000019000000000cab0019000000200bb00039000000000d2b0019000000000d0d04330000000000dc0435000000000c9b004b00000fbd0000413d0000000002a900190000000000020435000000000119001900000020091000390000000002040433000000000a02004b00000fd30000613d000000000a000019000000000b9a0019000000200aa00039000000000c4a0019000000000c0c04330000000000cb0435000000000b2a004b00000fcc0000413d00000000049200190000000000040435000000000112001900000020041000390000000002050433000000000902004b00000fe20000613d0000000009000019000000000a4900190000002009900039000000000b590019000000000b0b04330000000000ba0435000000000a29004b00000fdb0000413d00000000044200190000000000040435000000000112001900000020041000390000000002060433000000000502004b00000ff10000613d000000000500001900000000094500190000002005500039000000000a650019000000000a0a04330000000000a90435000000000925004b00000fea0000413d00000000044200190000000000040435000000000112001900000020041000390000000002070433000000000502004b000010000000613d000000000500001900000000064500190000002005500039000000000975001900000000090904330000000000960435000000000625004b00000ff90000413d00000000044200190000000000040435000000000112001900000020041000390000000002080433000000000502004b0000100f0000613d000000000500001900000000064500190000002005500039000000000785001900000000070704330000000000760435000000000625004b000010080000413d000000000442001900000000000404350000000001310049000000000112001900000000001304350000003f02100039000000200100008a000000000212016f0000000005320019000000000225004b00000000020000190000000102004039000005fe0450009c0000012b0000213d00000001022001900000012b0000c13d000000400050043f000000230200008a0000000b060000290000000004620049000001c4026000390000000207000367000000000627034f000000000606043b00000000080000310000000009480019000005fd0a000041000000000b96004b000000000b000019000000000b0a8019000005fd09900197000005fd0c600197000000000d9c004b000000000a00801900000000099c013f000005fd0990009c00000000090b001900000000090a6019000000000909004b0000010d0000c13d0000000a090000290000000009960019000000000697034f000000000606043b000005fe0a60009c0000010d0000213d000000000a6800490000002008900039000005fd09000041000000000ba8004b000000000b000019000000000b092019000005fd0aa00197000005fd0c800197000000000dac004b0000000009008019000000000aac013f000005fd0aa0009c00000000090bc019000000000909004b0000010d0000c13d000000010960008c000014290000c13d000000000687034f000000000606043b000000010700008a000005fd08000041000000000776004b00000000070000190000000007082019000005fd06600197000005fd0960009c0000000008008019000005fd06600167000005fd0660009c00000000070860190000006006000039000000000707004b000015080000c13d0000062f0650009c0000012b0000213d0000004006500039000000400060043f000000200650003900000632070000410000000000760435000000010600003900000000006504350000000006050019000015080000013d000000400200043d000400000002001d0000062f0220009c0000012b0000213d00000004030000290000004002300039000000400020043f0000000102000039000000000223043600000000030000310000000203300367000000000400001900000005054002100000000006520019000000000553034f000000000505043b0000000000560435000000010440003a000010750000413d00000004030000290000000003030433000000000303004b0000032b0000613d000000f80110021000000000030204330000063003300197000000000113019f000005fd01100167000000000012043500000060010000390000000b0200002900000144032000390000000202000367000000000332034f000000000303043b000000000303004b000010fb0000c13d0000000203000029000000000432034f000000000300003100000001050000290000000005530019000000000904043b000005fd04000041000000000659004b00000000060000190000000006048019000005fd05500197000005fd07900197000000000857004b0000000004008019000000000557013f000005fd0550009c000000000406c019000000000404004b0000010d0000c13d00000009040000290000000004040433000000070500002900000000050504330000000606000029000000000606043300000005070000290000000007070433000000040800002900000000080804330000000a0a0000290000000009a90019000000000292034f000000000202043b000005fe0a20009c0000010d0000213d00000000032300490000002009900039000005fd0a000041000000000b39004b000000000b000019000000000b0a2019000005fd03300197000005fd09900197000000000c39004b000000000a008019000000000339013f000005fd0330009c00000000030b001900000000030a6019000000000303004b0000010d0000c13d0000000003450019000000000363001900000000037300190000000003830019000000000223001900000000030104330000000002320019000005fe02200197000000380320008c0000119d0000413d0000002003200270000005f50420009c00000000040200190000000004032019000005f50320009c0000000003000019000000040300203900000002053001bf0000ffff0640008c000000000305201900000010054002700000000004052019000000ff0440008c00000000040000190000000104002039000000400600043d0000062f0560009c0000012b0000213d000000000343019f0000004004600039000000400040043f0000000204300039000000000446043600000000050000310000000205500367000000000700001900000005087002100000000009840019000000000885034f000000000808043b0000000000890435000000010770003a000010e50000413d0000000005060433000000000505004b0000032b0000613d00000000050404330000063005500197000000f807300210000000000557019f00000636055001c700000000005404350000000303300210000000f80330008900000000023201cf00000021036000390000000000230435000011b70000013d0000062d010000410000000000100439000005f5010000410000000002000414000005f50320009c0000000001024019000000c0011002100000062e011001c70000800b0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000000800210008c000011600000413d0000008002100270000006310310009c000000000201a019000006310310009c0000000003000019000000100300203900000008043001bf000005fe0520009c00000000030420190000004004200270000005fe0520009c000000000204201900000004043001bf000005f50520009c00000000030420190000002004200270000005f50520009c000000000204201900000002043001bf0000ffff0520008c000000000304201900000010042002700000000002042019000000ff0220008c00000000020000190000000102002039000000000323001900000041023000390000000304000029000000000442016f000000400200043d0000000004420019000000000524004b00000000050000190000000105004039000005fe0640009c0000012b0000213d00000001055001900000012b0000c13d000000400040043f0000000204300039000000000442043600000021053000390000000505500272000011420000613d00000000060000310000000206600367000000000700001900000005087002100000000009840019000000000886034f000000000808043b00000000008904350000000107700039000000000857004b0000113a0000413d000000000500004b000011440000613d0000000005020433000000000505004b0000032b0000613d00000000050404330000063005500197000000f806300210000000000556019f000006320550004100000000005404350000000303300210000000f80330008900000000013101cf000000ff0330008c0000000001002019000000210320003900000000001304350000117d0000013d000005f5020000410000000704000029000005f50340009c00000000030200190000000003044019000005f50410009c000000000102801900000060011002100000004002300210000000000121019f000017d100010430000000400200043d0000062f0320009c0000012b0000213d0000004003200039000000400030043f0000000103000039000000000332043600000000040000310000000204400367000000000500001900000005065002100000000007630019000000000664034f000000000606043b0000000000670435000000010550003a0000116a0000413d0000000004020433000000000404004b0000032b0000613d000000f804100210000005fd05000041000000000101004b0000000001040019000000000105601900000000040304330000063004400197000000000114019f0000000000130435000000400100043d00000020041000390000000003020433000000000503004b0000118a0000613d000000000500001900000000064500190000002005500039000000000725001900000000070704330000000000760435000000000635004b000011830000413d0000000002430019000006410400004100000000004204350000000202300039000000000021043500000041023000390000000303000029000000000332016f0000000002130019000000000332004b00000000030000190000000103004039000005fe0420009c0000012b0000213d00000001033001900000012b0000c13d000000400020043f00000002020003670000108e0000013d000000400600043d0000062f0360009c0000012b0000213d0000004003600039000000400030043f0000000103000039000000000336043600000000040000310000000204400367000000000500001900000005075002100000000008730019000000000774034f000000000707043b0000000000780435000000010550003a000011a70000413d0000000004060433000000000404004b0000032b0000613d000000f80220021000000000040304330000063004400197000000000242019f0000063502200041000000000023043500000000020000310000000103000029000000000532001900000002030003670000000204000029000000000443034f000000000404043b000005fd07000041000000000854004b00000000080000190000000008078019000005fd05500197000005fd09400197000000000a59004b0000000007008019000000000559013f000005fd0550009c00000000050800190000000005076019000000000505004b0000010d0000c13d0000000a050000290000000005540019000000000353034f000000000403043b000005fe0340009c0000010d0000213d00000000024200490000002005500039000005fd03000041000000000725004b00000000070000190000000007032019000005fd02200197000005fd08500197000000000928004b0000000003008019000000000228013f000005fd0220009c00000000020700190000000002036019000000000202004b0000010d0000c13d000000400200043d00000020032000390000000007060433000000000807004b000011ef0000613d000000000800001900000000093800190000002008800039000000000a680019000000000a0a04330000000000a90435000000000978004b000011e80000413d000000000637001900000000000604350000000006270019000000200860003900000009070000290000000007070433000000000907004b000012000000613d0000000009000019000000000a8900190000002009900039000000090b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000011f80000413d000000000887001900000000000804350000000006670019000000200860003900000007070000290000000007070433000000000907004b000012110000613d0000000009000019000000000a8900190000002009900039000000070b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b000012090000413d000000000887001900000000000804350000000006670019000000200860003900000006070000290000000007070433000000000907004b000012220000613d0000000009000019000000000a8900190000002009900039000000060b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000121a0000413d000000000887001900000000000804350000000006670019000000200860003900000005070000290000000007070433000000000907004b000012330000613d0000000009000019000000000a8900190000002009900039000000050b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000122b0000413d000000000887001900000000000804350000000006670019000000200860003900000004070000290000000007070433000000000907004b000012440000613d0000000009000019000000000a8900190000002009900039000000040b000029000000000bb90019000000000b0b04330000000000ba0435000000000a79004b0000123c0000413d0000000008870019000000000008043500000000066700190000001f0740018f000000200860003900000002055003670000000509400272000012550000613d000000000a000019000000050ba00210000000000cb80019000000000bb5034f000000000b0b043b0000000000bc0435000000010aa00039000000000b9a004b0000124d0000413d000000000a07004b000012640000613d0000000509900210000000000595034f00000000089800190000000307700210000000000908043300000000097901cf000000000979022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000595019f00000000005804350000000004460019000000200640003900000000000604350000000005010433000000000705004b000012720000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000857004b0000126b0000413d000000000165001900000000000104350000000001240049000000000115001900000000001204350000003f011000390000000304000029000000000441016f0000000001240019000000000441004b00000000040000190000000104004039000005fe0510009c0000012b0000213d00000001044001900000012b0000c13d000000400010043f000005f501000041000005f50430009c000000000301801900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b000900000001001d0000000b01000029000000e4021000390000000201000367000000000221034f000000000202043b000005ff02200198000012ba0000c13d0000000b03000029000000a402300039000000000221034f0000006403300039000000000331034f000000000303043b000000000402043b00000000523400a9000000000504004b000012ac0000613d00000000544200d9000000000334004b000012b40000c13d0000000b030000290000012403300039000000000131034f000000000101043b000000000121001a000700000001001d000012b40000413d000012bf0000013d0000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000b020000290000012402200039000000000121034f000000000101043b000700000001001d0000064201000041000000000010043900000008010000290000000400100443000005f5010000410000000002000414000005f50320009c0000000001024019000000c00110021000000616011001c70000800a0200003917cf17c00000040f00000001022001900000010d0000613d000000000101043b0000000702000029000000000112004b000012e60000a13d000000400100043d00000064021000390000064a03000041000000000032043500000044021000390000064b0300004100000000003204350000002402100039000000220300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d10001043000000000030000310000000b020000290000000001230049000000230410008a000001e4022000390000000201000367000000000221034f000000000202043b000005fd05000041000000000642004b00000000060000190000000006058019000005fd04400197000005fd07200197000000000847004b0000000005008019000000000447013f000005fd0440009c00000000040600190000000004056019000000000404004b0000010d0000c13d0000000a040000290000000002420019000000000121034f000000000101043b000005fe0410009c0000010d0000213d00000000041300490000002005200039000005fd02000041000000000645004b00000000060000190000000006022019000005fd04400197000005fd07500197000000000847004b0000000002008019000000000447013f000005fd0440009c000000000206c019000000000202004b0000010d0000c13d0000003f02100039000000200400008a000000000442016f000000400200043d0000000004420019000000000624004b00000000060000190000000106004039000005fe0740009c0000012b0000213d00000001066001900000012b0000c13d000000400040043f00000000041204360000000006510019000000000336004b0000010d0000213d0000001f0310018f000000020550036700000005061002720000132f0000613d000000000700001900000005087002100000000009840019000000000885034f000000000808043b00000000008904350000000107700039000000000867004b000013270000413d000000000703004b0000133e0000613d0000000506600210000000000565034f00000000066400190000000303300210000000000706043300000000073701cf000000000737022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000373019f0000000000360435000000000114001900000000000104350000000001020433000000410110008c0000135c0000c13d00000041012000390000000001010433000000ff0310018f0000001d0130008a000000030500008a000000000151004b0000136e0000213d000000400100043d0000004402100039000006490300004100000000003204350000002402100039000000160300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000400100043d00000044021000390000064303000041000000000032043500000024021000390000001d0300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000000404043300000040012000390000000002010433000000400100043d000006440520009c000013850000413d0000004402100039000006480300004100000000003204350000002402100039000000090300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000060c011001c7000017d100010430000000600510003900000000002504350000004002100039000000000042043500000020021000390000000000320435000000090200002900000000002104350000000000000435000005f5020000410000000003000414000005f50430009c0000000003028019000005f50410009c00000000010280190000004001100210000000c002300210000000000112019f00000645011001c7000000010200003917cf17c00000040f00000000030100190000006003300270000005f503300197000000200430008c000000200400003900000000040340190000001f0540018f0000000504400272000013ab0000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b000013a40000413d000000000605004b000013b90000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000013d10000613d0000000001000433000005ff011001970000000802000029000000000221004b0000000002000019000000010200c039000000000101004b0000000001000019000000010100603900000000011201a00000064601000041000000000100c019000000400200043d0000000000120435000005f501000041000005f50320009c0000000001024019000000400110021000000647011001c7000017d00001042e000000400200043d0000001f0430018f0000000503300272000013de0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013d60000413d000000000504004b000013ed0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005f5010000410000000103000031000005f50430009c0000000003018019000005f50420009c000000000102401900000040011002100000006002300210000000000112019f000017d100010430000000380760008c0000145b0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014120000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000014750000013d000000380760008c000014ee0000413d0000002007600270000005f50860009c00000000080600190000000008072019000005f50760009c0000000007000019000000040700203900000002097001bf0000ffff0a80008c000000000709201900000010098002700000000008092019000000ff0880008c000000000800001900000001080020390000062f0950009c0000012b0000213d000000000787019f0000004008500039000000400080043f0000000208700039000000000885043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb80019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000014440000413d0000000009050433000000000909004b0000032b0000613d00000000090804330000063009900197000000f80a70021000000000099a019f00000634099001c700000000009804350000000307700210000000f80770008900000000067601cf000000210750003900000000006704350000000006050019000015080000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014640000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a0000147f0000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a3b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009020433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000159c0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a000014d80000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000015b50000013d0000062f0750009c0000012b0000213d0000004007500039000000400070043f00000001070000390000000007750436000000000800003100000002088003670000000009000019000000050a900210000000000ba70019000000000aa8034f000000000a0a043b0000000000ab0435000000010990003a000014f70000413d0000000008050433000000000808004b0000032b0000613d000000f80660021000000000080704330000063008800197000000000668019f000005fd0660016700000000006704350000000006050019000000400500043d0000062f0750009c0000012b0000213d0000004007500039000000400070043f0000000108000039000000000785043600000000090000310000000209900367000000000a000019000000050ba00210000000000cb70019000000000bb9034f000000000b0b043b0000000000bc0435000000010aa0003a000015120000413d0000000009050433000000000909004b0000032b0000613d0000000009070433000006300990019700000635099001c7000000000097043500000000070000310000000009470019000000020b000367000000000a2b034f000000000c0a043b000005fd0a000041000000000d9c004b000000000d000019000000000d0a8019000005fd09900197000005fd0ec00197000000000f9e004b000000000a00801900000000099e013f000005fd0990009c00000000090d001900000000090a6019000000000909004b0000010d0000c13d0000000009030433000000000a0604330000000a0d000029000000000cdc0019000000000bcb034f000000000b0b043b000005fe0db0009c0000010d0000213d0000000007b70049000000200cc00039000005fd0d000041000000000e7c004b000000000e000019000000000e0d2019000005fd07700197000005fd0cc00197000000000f7c004b000000000d00801900000000077c013f000005fd0770009c00000000070e001900000000070d6019000000000707004b0000010d0000c13d00000000079a00190000000007b7001900000000090504330000000007970019000005fe09700197000000380790008c0000165f0000413d0000002007900270000005f50890009c000000000709a019000005f50890009c00000000080000190000000408002039000000020a8001bf0000ffff0b70008c00000000080a2019000000100a70027000000000070a2019000000ff0770008c000000000a000019000000010a002039000000400700043d0000062f0b70009c0000012b0000213d0000000008a8019f000000400a7000390000004000a0043f000000020a800039000000000aa70436000000000b000031000000020bb00367000000000c000019000000050dc00210000000000eda0019000000000ddb034f000000000d0d043b0000000000de0435000000010cc0003a0000156b0000413d000000000b070433000000000b0b004b0000032b0000613d000000000b0a0433000006300bb00197000000f80c800210000000000bbc019f000006360bb001c70000000000ba04350000000308800210000000f80880008900000000088901cf00000021097000390000000000890435000016780000013d0000001f0430018f00000005023002720000158c0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000015850000413d000000000504004b0000159a0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000017d100010430000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000015a50000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000334034f000000000303043b000005fd0a000041000000000b83004b000000000b000019000000000b0a8019000005fd08800197000005fd0c300197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000003830019000000000434034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009300039000005fd03000041000000000a49004b000000000a000019000000000a032019000005fd04400197000005fd0b900197000000000c4b004b000000000300801900000000044b013f000005fd0440009c00000000030ac019000000000303004b0000010d0000c13d000000400300043d00000020043000390000062a0a0000410000000000a40435000000210b300039000000000a070433000000000c0a004b000015ed0000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000015e60000413d0000000007ba0019000000000007043500000000073a0019000000210b700039000000000a020433000000000c0a004b000015fc0000613d000000000c000019000000000dbc0019000000200cc00039000000000e2c0019000000000e0e04330000000000ed0435000000000dac004b000015f50000413d0000000002ba0019000000000002043500000000027a0019000000210a2000390000000007060433000000000b07004b0000160b0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016040000413d0000000006a70019000000000006043500000000022700190000001f0680018f00000021072000390000000209900367000000050a8002720000161c0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016140000413d000000000b06004b0000162b0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000002820019000000210720003900000000000704350000000006050433000000000806004b000016390000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016320000413d0000000005760019000000000005043500000000023200490000000002260019000000010520003900000000005304350000004002200039000000000212016f0000000001320019000000000221004b00000000020000190000000102004039000005fe0510009c0000012b0000213d00000001022001900000012b0000c13d000000400010043f000005f501000041000005f50240009c0000000002010019000000000204401900000040022002100000000003030433000005f50430009c00000000030180190000006003300210000000000223019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d000000400700043d0000062f0a70009c0000012b0000213d000000400a7000390000004000a0043f0000000008870436000000000a000031000000020aa00367000000000b000019000000050cb00210000000000dc80019000000000cca034f000000000c0c043b0000000000cd0435000000010bb0003a000016680000413d000000000a070433000000000a0a004b0000032b0000613d000000f809900210000000000a080433000006300aa001970000000009a9019f00000635099000410000000000980435000000000900003100000000084900190000000204000367000000000224034f000000000202043b000005fd0a000041000000000b82004b000000000b000019000000000b0a8019000005fd08800197000005fd0c200197000000000d8c004b000000000a00801900000000088c013f000005fd0880009c00000000080b001900000000080a6019000000000808004b0000010d0000c13d0000000a080000290000000002820019000000000424034f000000000804043b000005fe0480009c0000010d0000213d00000000048900490000002009200039000005fd02000041000000000a49004b000000000a000019000000000a022019000005fd04400197000005fd0b900197000000000c4b004b000000000200801900000000044b013f000005fd0440009c00000000020ac019000000000202004b0000010d0000c13d000000400200043d0000002004200039000006370a0000410000000000a40435000000210b200039000000000a070433000000000c0a004b000016b00000613d000000000c000019000000000dbc0019000000200cc00039000000000e7c0019000000000e0e04330000000000ed0435000000000dac004b000016a90000413d0000000007ba0019000000000007043500000000072a0019000000210b700039000000000a030433000000000c0a004b000016bf0000613d000000000c000019000000000dbc0019000000200cc00039000000000e3c0019000000000e0e04330000000000ed0435000000000dac004b000016b80000413d0000000003ba0019000000000003043500000000037a0019000000210a3000390000000007060433000000000b07004b000016ce0000613d000000000b000019000000000cab0019000000200bb00039000000000d6b0019000000000d0d04330000000000dc0435000000000c7b004b000016c70000413d0000000006a70019000000000006043500000000033700190000001f0680018f00000021073000390000000209900367000000050a800272000016df0000613d000000000b000019000000050cb00210000000000dc70019000000000cc9034f000000000c0c043b0000000000cd0435000000010bb00039000000000cab004b000016d70000413d000000000b06004b000016ee0000613d000000050aa002100000000009a9034f0000000007a700190000000306600210000000000a070433000000000a6a01cf000000000a6a022f000000000909043b0000010006600089000000000969022f00000000066901cf0000000006a6019f00000000006704350000000003830019000000210730003900000000000704350000000006050433000000000806004b000016fc0000613d000000000800001900000000097800190000002008800039000000000a580019000000000a0a04330000000000a90435000000000968004b000016f50000413d0000000005760019000000000005043500000000032300490000000003360019000000010530003900000000005204350000004003300039000000000313016f0000000001230019000000000331004b00000000030000190000000103004039000005fe0510009c0000012b0000213d00000001033001900000012b0000c13d000000400010043f000005f501000041000005f50340009c0000000003010019000000000304401900000040033002100000000002020433000005f50420009c00000000020180190000006002200210000000000232019f0000000003000414000005f50430009c0000000001034019000000c001100210000000000121019f00000637011001c7000080100200003917cf17c00000040f0000000102200190000012960000c13d0000010d0000013d0003000000000002000000040100008a0000000003100031000005fd010000410000005f0230008c00000000020000190000000002012019000005fd04300197000000000504004b0000000001008019000005fd0440009c000000000102c019000000000101004b000017680000613d00000002010003670000004402100370000000000202043b000005fe0420009c000017680000213d0000000003230049000005fd04000041000002600530008c00000000050000190000000005044019000005fd03300197000000000603004b000000000400a019000005fd0330009c00000000030500190000000003046019000000000303004b000017680000c13d0000000003000411000080010330008c000017660000c13d0000000003000412000005ff033001970000000004000410000000000343004b000017660000c13d000000a403200039000000000331034f0000006402200039000000000121034f000000000101043b000000000203043b000000000302004b0000176a0000c13d0000000004000415000000030440008a00000020044000c90000000001000414000300000000001d000100000004001d000005f502000041000005f50310009c0000000001028019000000c001100210000080010200003917cf17bb0000040f000000010300002900030000000103550000006001100270000105f50010019d000000200130011a00000001012001950000000101200190000017820000613d0000000001000019000017d00001042e0000000001000019000017d10001043000000000431200a900000000422300d9000000000112004b000017970000c13d0000000004000415000000020440008a00000020044000c90000000001000414000200000000001d000000000203004b000017570000613d000005f502000041000005f50410009c0000000001028019000000c00110021000000637011001c700008009020000390000800104000039000000000500001917cf17bb0000040f0000000003000415000000020330008a00000020033000c90000175f0000013d000000400100043d00000064021000390000064e03000041000000000032043500000044021000390000064f0300004100000000003204350000002402100039000000250300003900000000003204350000060b020000410000000000210435000000040210003900000020030000390000000000320435000005f502000041000005f50310009c000000000102801900000040011002100000061a011001c7000017d1000104300000064c0100004100000000001004350000001101000039000000040010043f0000064d01000041000017d1000104300000000001000412000005ff011001970000000002000410000000000121004b000017a60000c13d0000000001000411000080010110008c000017a80000613d000000000001042d0000000001000019000017d00001042e0000064c0100004100000000001004350000000101000039000000040010043f0000064d01000041000017d100010430000000000403004b000017b80000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b000017b10000413d00000000012300190000000000010435000000000001042d000017be002104210000000102000039000000000001042d0000000002000019000000000001042d000017c3002104230000000102000039000000000001042d0000000002000019000000000001042d000017c8002104210000000102000039000000000001042d0000000002000019000000000001042d000017cd002104230000000102000039000000000001042d0000000002000019000000000001042d000017cf00000432000017d00001042e000017d1000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000df9c158800000000000000000000000000000000000000000000000000000000df9c158900000000000000000000000000000000000000000000000000000000e2f318e300000000000000000000000000000000000000000000000000000000eeb8cb0900000000000000000000000000000000000000000000000000000000202bcce700000000000000000000000000000000000000000000000000000000a28c1aee8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000ffffffff00000000000000000000000000000000000000000000000000000000ecf95b8a000000000000000000000000000000000000000000000000000000009c4d535b000000000000000000000000000000000000000000000000000000003cda3351000000000000000000000000000000000000000000000000000000005d3827000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000949431dc000000000000000000000000000000000000000000000000000000008c5a344500000000000000000000000000000000000000000000000000000000556e737570706f72746564207061796d617374657220666c6f770000000000000000000000000000000000000000000000000064000000800000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000095ea7b3000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000004400000000000000000000000020746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000005361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f0000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000054686520617070726f76616c4261736564207061796d617374657220696e707574206d757374206265206174206c65617374203638206279746573206c6f6e670000000000000000000000000000000000000084000000800000000000000000546865207374616e64617264207061796d617374657220696e707574206d757374206265206174206c656173742034206279746573206c6f6e67000000000000e1239cd800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0456e636f64696e6720756e737570706f727465642074780000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff81000000000000000000000000000000000000000000000000000000000000009400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b656363616b3235362072657475726e656420696e76616c6964206461746100848e1bfa1ac4e3576b728bda6721b215c70a7799a5b4866282a71bab954baac8000000000000000000000000000000000000000000000000fffffffffffffe1fc2f8787176b8ac6bf7215b4adcc1e069bf4ab82d9ab1df05a57a91d425935b6ead7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a519b453ce45aaaaf3a300f5a9ec95869b4f28ab10430b572ee218c3a6a5e07d6f000000000000000000000000000000000000000000000000ffffffffffffff5f190100000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395369676e6174757265206c656e67746820697320696e636f72726563740000007fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a10000000000000000000000000000000000000080000000000000000000000000202bcce7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c69642073000000000000000000000000000000000000000000000076206973206e656974686572203237206e6f722032380000000000000000000075650000000000000000000000000000000000000000000000000000000000004e6f7420656e6f7567682062616c616e636520666f7220666565202b2076616c4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007261746f720000000000000000000000000000000000000000000000000000004661696c656420746f20706179207468652066656520746f20746865206f7065966802eaf4c7f1c9550c6463b3beb7b9087e1a4d7428d44371ae2340d9c02dec", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/EcAdd.yul.zbin b/src/deps/contracts/EcAdd.yul.zbin new file mode 100644 index 00000000..d7942db1 Binary files /dev/null and b/src/deps/contracts/EcAdd.yul.zbin differ diff --git a/src/deps/contracts/EcMul.yul.zbin b/src/deps/contracts/EcMul.yul.zbin new file mode 100644 index 00000000..6fd9e212 Binary files /dev/null and b/src/deps/contracts/EcMul.yul.zbin differ diff --git a/src/deps/contracts/Ecrecover.yul.zbin b/src/deps/contracts/Ecrecover.yul.zbin index 4ae5b1c5..6ea47838 100644 Binary files a/src/deps/contracts/Ecrecover.yul.zbin and b/src/deps/contracts/Ecrecover.yul.zbin differ diff --git a/src/deps/contracts/EmptyContract.json b/src/deps/contracts/EmptyContract.json index bf3cde26..3a96fb6c 100644 --- a/src/deps/contracts/EmptyContract.json +++ b/src/deps/contracts/EmptyContract.json @@ -12,8 +12,8 @@ "type": "receive" } ], - "bytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e00000012000104300000000000000000000000020000000000000000000000000000004000000100000000000000000051a2facb5255591d95e024cbf43c9193de3fb9cc83c223a9536a35852c01322b", - "deployedBytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e00000012000104300000000000000000000000020000000000000000000000000000004000000100000000000000000051a2facb5255591d95e024cbf43c9193de3fb9cc83c223a9536a35852c01322b", + "bytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e0000001200010430000000000000000000000002000000000000000000000000000000400000010000000000000000004ff0391cc9c9c321f4092988da16e0f3d6058db76dd76cbe3c5ec972dbfb629f", + "deployedBytecode": "0x0000000101200190000000040000c13d0000000001000019000000110001042e0000008001000039000000400010043f0000000001000416000000000101004b0000000e0000c13d0000002001000039000001000010044300000120000004430000000501000041000000110001042e000000000100001900000012000104300000001000000432000000110001042e0000001200010430000000000000000000000002000000000000000000000000000000400000010000000000000000004ff0391cc9c9c321f4092988da16e0f3d6058db76dd76cbe3c5ec972dbfb629f", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/EventWriter.yul.zbin b/src/deps/contracts/EventWriter.yul.zbin index 96dee42c..cd15a102 100644 Binary files a/src/deps/contracts/EventWriter.yul.zbin and b/src/deps/contracts/EventWriter.yul.zbin differ diff --git a/src/deps/contracts/ImmutableSimulator.json b/src/deps/contracts/ImmutableSimulator.json index 07174714..42fbdcb4 100644 --- a/src/deps/contracts/ImmutableSimulator.json +++ b/src/deps/contracts/ImmutableSimulator.json @@ -58,8 +58,8 @@ "type": "function" } ], - "bytecode": "0x0002000000000002000700000000000200010000000103550000006001100270000000390010019d0000008001000039000000400010043f0000000101200190000000380000c13d0000000001000031000000040110008c000000770000413d0000000101000367000000000101043b000000e0011002700000003b0210009c000000400000613d0000003c0110009c000000770000c13d0000000001000416000000000101004b000000770000c13d000000040100008a00000000011000310000003d02000041000000400310008c000000000300001900000000030240190000003d01100197000000000401004b000000000200a0190000003d0110009c00000000010300190000000001026019000000000101004b000000770000c13d00000004010000390000000101100367000000000101043b0000003e0210009c000000770000213d0000000000100435000000200000043f000000000100001900e000c90000040f00000024020000390000000102200367000000000202043b0000000000200435000000200010043f000000000100001900e000c90000040f000000000101041a000000800010043f0000004501000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000002001000039000001000010044300000120000004430000003a01000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000000001000031000000040210008a0000003d03000041000000400420008c000000000400001900000000040340190000003d02200197000000000502004b000000000300a0190000003d0220009c00000000020400190000000002036019000000000202004b000000770000c13d00000001020003670000000403200370000000000303043b000300000003001d0000003e0330009c000000770000213d0000002403200370000000000303043b0000003f0430009c000000770000213d00000023043000390000003d05000041000000000614004b000000000600001900000000060580190000003d071001970000003d04400197000000000874004b0000000005008019000000000474013f0000003d0440009c00000000040600190000000004056019000000000404004b000000770000c13d0000000404300039000000000242034f000000000202043b000200000002001d0000003f0220009c000000770000213d000000240330003900000002020000290000000602200210000100000003001d0000000002320019000000000112004b000000790000a13d0000000001000019000000e2000104300000000001000411000080060110008c000000b40000c13d0000000201000029000000000101004b000000b20000613d00008010040000390000000002000019000700000004001d000500000002001d00000006012002100000000102000029000000000121001900000020021000390000000103000367000000000223034f000000000113034f000000000101043b000600000001001d000000000102043b000400000001001d00000003010000290000000000100435000000200000043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000000204001900e000db0000040f0000000102200190000000770000613d000000000101043b00000006020000290000000000200435000000200010043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000070200002900e000db0000040f0000000102200190000000770000613d000000000101043b0000000402000029000000000021041b000000050200002900000001022000390000000201000029000000000112004b0000000704000029000000820000413d0000000001000019000000e10001042e000000400100043d00000064021000390000004003000041000000000032043500000044021000390000004103000041000000000032043500000024021000390000002d030000390000000000320435000000420200004100000000002104350000000402100039000000200300003900000000003204350000003902000041000000390310009c0000000001028019000000400110021000000043011001c7000000e20001043000000039020000410000000003000414000000390430009c0000000003028019000000390410009c00000000010280190000004001100210000000c002300210000000000112019f00000044011001c7000080100200003900e000db0000040f0000000102200190000000d90000613d000000000101043b000000000001042d0000000001000019000000e200010430000000de002104230000000102000039000000000001042d0000000002000019000000000001042d000000e000000432000000e10001042e000000e200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000310ab0898000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff7374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000080000000000000000070633c7e9bce02d97739d24312a9a6e5e17ed879184ccb1a4dc080f0aa1fd9ba", - "deployedBytecode": "0x0002000000000002000700000000000200010000000103550000006001100270000000390010019d0000008001000039000000400010043f0000000101200190000000380000c13d0000000001000031000000040110008c000000770000413d0000000101000367000000000101043b000000e0011002700000003b0210009c000000400000613d0000003c0110009c000000770000c13d0000000001000416000000000101004b000000770000c13d000000040100008a00000000011000310000003d02000041000000400310008c000000000300001900000000030240190000003d01100197000000000401004b000000000200a0190000003d0110009c00000000010300190000000001026019000000000101004b000000770000c13d00000004010000390000000101100367000000000101043b0000003e0210009c000000770000213d0000000000100435000000200000043f000000000100001900e000c90000040f00000024020000390000000102200367000000000202043b0000000000200435000000200010043f000000000100001900e000c90000040f000000000101041a000000800010043f0000004501000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000002001000039000001000010044300000120000004430000003a01000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000000001000031000000040210008a0000003d03000041000000400420008c000000000400001900000000040340190000003d02200197000000000502004b000000000300a0190000003d0220009c00000000020400190000000002036019000000000202004b000000770000c13d00000001020003670000000403200370000000000303043b000300000003001d0000003e0330009c000000770000213d0000002403200370000000000303043b0000003f0430009c000000770000213d00000023043000390000003d05000041000000000614004b000000000600001900000000060580190000003d071001970000003d04400197000000000874004b0000000005008019000000000474013f0000003d0440009c00000000040600190000000004056019000000000404004b000000770000c13d0000000404300039000000000242034f000000000202043b000200000002001d0000003f0220009c000000770000213d000000240330003900000002020000290000000602200210000100000003001d0000000002320019000000000112004b000000790000a13d0000000001000019000000e2000104300000000001000411000080060110008c000000b40000c13d0000000201000029000000000101004b000000b20000613d00008010040000390000000002000019000700000004001d000500000002001d00000006012002100000000102000029000000000121001900000020021000390000000103000367000000000223034f000000000113034f000000000101043b000600000001001d000000000102043b000400000001001d00000003010000290000000000100435000000200000043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000000204001900e000db0000040f0000000102200190000000770000613d000000000101043b00000006020000290000000000200435000000200010043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000070200002900e000db0000040f0000000102200190000000770000613d000000000101043b0000000402000029000000000021041b000000050200002900000001022000390000000201000029000000000112004b0000000704000029000000820000413d0000000001000019000000e10001042e000000400100043d00000064021000390000004003000041000000000032043500000044021000390000004103000041000000000032043500000024021000390000002d030000390000000000320435000000420200004100000000002104350000000402100039000000200300003900000000003204350000003902000041000000390310009c0000000001028019000000400110021000000043011001c7000000e20001043000000039020000410000000003000414000000390430009c0000000003028019000000390410009c00000000010280190000004001100210000000c002300210000000000112019f00000044011001c7000080100200003900e000db0000040f0000000102200190000000d90000613d000000000101043b000000000001042d0000000001000019000000e200010430000000de002104230000000102000039000000000001042d0000000002000019000000000001042d000000e000000432000000e10001042e000000e200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000310ab0898000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff7374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002000000080000000000000000070633c7e9bce02d97739d24312a9a6e5e17ed879184ccb1a4dc080f0aa1fd9ba", + "bytecode": "0x0002000000000002000700000000000200010000000103550000006001100270000000390010019d0000008001000039000000400010043f0000000101200190000000380000c13d0000000001000031000000040110008c000000770000413d0000000101000367000000000101043b000000e0011002700000003b0210009c000000400000613d0000003c0110009c000000770000c13d0000000001000416000000000101004b000000770000c13d000000040100008a00000000011000310000003d02000041000000400310008c000000000300001900000000030240190000003d01100197000000000401004b000000000200a0190000003d0110009c00000000010300190000000001026019000000000101004b000000770000c13d00000004010000390000000101100367000000000101043b0000003e0210009c000000770000213d0000000000100435000000200000043f000000000100001900e000c90000040f00000024020000390000000102200367000000000202043b0000000000200435000000200010043f000000000100001900e000c90000040f000000000101041a000000800010043f0000004501000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000002001000039000001000010044300000120000004430000003a01000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000000001000031000000040210008a0000003d03000041000000400420008c000000000400001900000000040340190000003d02200197000000000502004b000000000300a0190000003d0220009c00000000020400190000000002036019000000000202004b000000770000c13d00000001020003670000000403200370000000000303043b000300000003001d0000003e0330009c000000770000213d0000002403200370000000000303043b0000003f0430009c000000770000213d00000023043000390000003d05000041000000000614004b000000000600001900000000060580190000003d071001970000003d04400197000000000874004b0000000005008019000000000474013f0000003d0440009c00000000040600190000000004056019000000000404004b000000770000c13d0000000404300039000000000242034f000000000202043b000200000002001d0000003f0220009c000000770000213d000000240330003900000002020000290000000602200210000100000003001d0000000002320019000000000112004b000000790000a13d0000000001000019000000e2000104300000000001000411000080060110008c000000b40000c13d0000000201000029000000000101004b000000b20000613d00008010040000390000000002000019000700000004001d000500000002001d00000006012002100000000102000029000000000121001900000020021000390000000103000367000000000223034f000000000113034f000000000101043b000600000001001d000000000102043b000400000001001d00000003010000290000000000100435000000200000043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000000204001900e000db0000040f0000000102200190000000770000613d000000000101043b00000006020000290000000000200435000000200010043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000070200002900e000db0000040f0000000102200190000000770000613d000000000101043b0000000402000029000000000021041b000000050200002900000001022000390000000201000029000000000112004b0000000704000029000000820000413d0000000001000019000000e10001042e000000400100043d00000064021000390000004003000041000000000032043500000044021000390000004103000041000000000032043500000024021000390000002d030000390000000000320435000000420200004100000000002104350000000402100039000000200300003900000000003204350000003902000041000000390310009c0000000001028019000000400110021000000043011001c7000000e20001043000000039020000410000000003000414000000390430009c0000000003028019000000390410009c00000000010280190000004001100210000000c002300210000000000112019f00000044011001c7000080100200003900e000db0000040f0000000102200190000000d90000613d000000000101043b000000000001042d0000000001000019000000e200010430000000de002104230000000102000039000000000001042d0000000002000019000000000001042d000000e000000432000000e10001042e000000e200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000310ab0898000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff7374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000002000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000800000000000000000ba4e2ffd1982cc43c10400dea65494b8885fae4d25a39cc204ef5a5a87953deb", + "deployedBytecode": "0x0002000000000002000700000000000200010000000103550000006001100270000000390010019d0000008001000039000000400010043f0000000101200190000000380000c13d0000000001000031000000040110008c000000770000413d0000000101000367000000000101043b000000e0011002700000003b0210009c000000400000613d0000003c0110009c000000770000c13d0000000001000416000000000101004b000000770000c13d000000040100008a00000000011000310000003d02000041000000400310008c000000000300001900000000030240190000003d01100197000000000401004b000000000200a0190000003d0110009c00000000010300190000000001026019000000000101004b000000770000c13d00000004010000390000000101100367000000000101043b0000003e0210009c000000770000213d0000000000100435000000200000043f000000000100001900e000c90000040f00000024020000390000000102200367000000000202043b0000000000200435000000200010043f000000000100001900e000c90000040f000000000101041a000000800010043f0000004501000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000002001000039000001000010044300000120000004430000003a01000041000000e10001042e0000000001000416000000000101004b000000770000c13d0000000001000031000000040210008a0000003d03000041000000400420008c000000000400001900000000040340190000003d02200197000000000502004b000000000300a0190000003d0220009c00000000020400190000000002036019000000000202004b000000770000c13d00000001020003670000000403200370000000000303043b000300000003001d0000003e0330009c000000770000213d0000002403200370000000000303043b0000003f0430009c000000770000213d00000023043000390000003d05000041000000000614004b000000000600001900000000060580190000003d071001970000003d04400197000000000874004b0000000005008019000000000474013f0000003d0440009c00000000040600190000000004056019000000000404004b000000770000c13d0000000404300039000000000242034f000000000202043b000200000002001d0000003f0220009c000000770000213d000000240330003900000002020000290000000602200210000100000003001d0000000002320019000000000112004b000000790000a13d0000000001000019000000e2000104300000000001000411000080060110008c000000b40000c13d0000000201000029000000000101004b000000b20000613d00008010040000390000000002000019000700000004001d000500000002001d00000006012002100000000102000029000000000121001900000020021000390000000103000367000000000223034f000000000113034f000000000101043b000600000001001d000000000102043b000400000001001d00000003010000290000000000100435000000200000043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000000204001900e000db0000040f0000000102200190000000770000613d000000000101043b00000006020000290000000000200435000000200010043f00000039010000410000000002000414000000390320009c0000000001024019000000c00110021000000044011001c7000000070200002900e000db0000040f0000000102200190000000770000613d000000000101043b0000000402000029000000000021041b000000050200002900000001022000390000000201000029000000000112004b0000000704000029000000820000413d0000000001000019000000e10001042e000000400100043d00000064021000390000004003000041000000000032043500000044021000390000004103000041000000000032043500000024021000390000002d030000390000000000320435000000420200004100000000002104350000000402100039000000200300003900000000003204350000003902000041000000390310009c0000000001028019000000400110021000000043011001c7000000e20001043000000039020000410000000003000414000000390430009c0000000003028019000000390410009c00000000010280190000004001100210000000c002300210000000000112019f00000044011001c7000080100200003900e000db0000040f0000000102200190000000d90000613d000000000101043b000000000001042d0000000001000019000000e200010430000000de002104230000000102000039000000000001042d0000000002000019000000000001042d000000e000000432000000e10001042e000000e200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000ad7e232e00000000000000000000000000000000000000000000000000000000310ab0898000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff7374656d20636f6e74726163740000000000000000000000000000000000000043616c6c61626c65206f6e6c7920627920746865206465706c6f79657220737908c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000002000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000800000000000000000ba4e2ffd1982cc43c10400dea65494b8885fae4d25a39cc204ef5a5a87953deb", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/Keccak256.yul.zbin b/src/deps/contracts/Keccak256.yul.zbin index 824cce81..143dd2af 100644 Binary files a/src/deps/contracts/Keccak256.yul.zbin and b/src/deps/contracts/Keccak256.yul.zbin differ diff --git a/src/deps/contracts/KnownCodesStorage.json b/src/deps/contracts/KnownCodesStorage.json index baf577fa..b7633d99 100644 --- a/src/deps/contracts/KnownCodesStorage.json +++ b/src/deps/contracts/KnownCodesStorage.json @@ -73,8 +73,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000005d66e2aaa29fc9cd80c0798c36e39e1edf28eb5cf8fe6d4aad924025ea85b5c6", - "deployedBytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000005d66e2aaa29fc9cd80c0798c36e39e1edf28eb5cf8fe6d4aad924025ea85b5c6", + "bytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000006aca1b77b249f1e5f885db2cd6e516c14e81511f82dd4bd0f8bb4ac27ba50922", + "deployedBytecode": "0x00030000000000020008000000000002000200000001035500000060011002700000006e0010019d000100000000001f0000008001000039000000400010043f00000001012001900000002e0000c13d0000000001000031000000040110008c000000b60000413d0000000201000367000000000101043b000000e001100270000000700210009c000000360000613d000000710210009c000000a50000613d000000720110009c000000b60000c13d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b60000c13d00000004010000390000000201100367000000000101043b000000000101041a000000800010043f0000008801000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000002001000039000001000010044300000120000004430000006f01000041000001b20001042e0000000001000416000000000101004b000000b60000c13d0000000002000031000000040120008a0000007303000041000000400410008c000000000400001900000000040340190000007301100197000000000501004b000000000300a019000000730110009c00000000010400190000000001036019000000000101004b000000b60000c13d00000002010003670000000403100370000000000403043b000000000304004b0000000003000019000000010300c039000200000004001d000000000334004b000000b60000c13d0000002403100370000000000303043b000000740430009c000000b60000213d00000023043000390000007305000041000000000624004b0000000006000019000000000605801900000073072001970000007304400197000000000874004b0000000005008019000000000474013f000000730440009c00000000040600190000000004056019000000000404004b000000b60000c13d0000000404300039000000000441034f000000000404043b000800000004001d000000740440009c000000b60000213d000000240430003900000008030000290000000503300210000700000004001d0000000003430019000000000223004b000000b60000213d0000000002000411000080010220008c000000fa0000c13d0000000802000029000000000202004b000000f80000613d0000000202000029000000000202004b0000010c0000c13d0000000102000039000500000002001d0000800d02000039000400000002001d0000000302000039000300000002001d0000000004000019000000850000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000502043b000000000205041a000000000202004b000000810000c13d0000007801500197000000790110009c000001660000c13d000600000004001d0000007a01500198000000c60000613d0000000501000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c7000000810400004100000004020000290000000303000029000000000600001901b101a70000040f000000020100036700000001022001900000000604000029000000810000c13d000000b60000013d0000000001000416000000000101004b000000b60000c13d000000040100008a00000000011000310000007302000041000000200310008c000000000300001900000000030240190000007301100197000000000401004b000000000200a019000000730110009c00000000010300190000000001026019000000000101004b000000b80000613d0000000001000019000001b30001043000000004010000390000000201100367000000000501043b00000000010004110000800e0110008c000000d70000c13d000000000105041a000000000101004b000000f80000c13d0000007801500197000000790110009c000001660000c13d0000007a01500198000000e90000c13d000000400100043d00000044021000390000008703000041000000000032043500000076020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b300010430000000400100043d00000044021000390000008303000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000000101000039000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000000600001901b101a70000040f0000000101200190000000b60000613d0000000001000019000001b20001042e000000400100043d00000044021000390000007503000041000000000032043500000024021000390000001f030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000077011001c7000001b3000104300000800802000039000500000002001d0000800202000039000100000002001d0000000004000019000001160000013d00000001044000390000000802000029000000000224004b000000f80000813d000000050240021000000007030000290000000002320019000000000221034f000000000302043b000000000203041a000000000202004b000001120000c13d0000007801300197000000790110009c000001660000c13d000400000004001d000600000003001d0000007a01300198000000c60000613d0000007b010000410000000000100439000000050100002900000004001004430000006e0100004100000000020004140000006e0320009c0000000001024019000000c0011002100000007c011001c7000000010200002901b101ac0000040f00000001022001900000000602000029000000b60000613d000000000101043b000000000101004b000000b60000613d000000400400043d0000007d010000410000000000140435000000040140003900000000002104350000006e0100004100000000020004140000006e0320009c00000000020180190000006e0340009c000300000004001d00000000010440190000004001100210000000c002200210000000000112019f0000007e011001c7000000050200002901b101a70000040f000000000301001900000060033002700001006e0030019d0000006e0430019700000001022001900000017b0000613d00000003020000290000007f0120009c000001a10000813d000000400020043f00000001010000390000000605000029000000000015041b0000006e0100004100000000020004140000006e0320009c0000000001024019000000c00110021000000080011001c70000800d0200003900000003030000390000008104000041000000020600002901b101a70000040f000000020100036700000001022001900000000404000029000001120000c13d000000b60000013d000000400100043d000000640210003900000084030000410000000000320435000000440210003900000085030000410000000000320435000000240210003900000022030000390000000000320435000000760200004100000000002104350000000402100039000000200300003900000000003204350000006e020000410000006e0310009c0000000001028019000000400110021000000086011001c7000001b300010430000000400200043d0000001f0340018f0000000504400272000001880000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000001800000413d000000000503004b000001970000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f00000000001404350000006e0100004100000001030000310000006e0430009c00000000030180190000006e0420009c000000000102401900000040011002100000006002300210000000000112019f000001b300010430000000820100004100000000001004350000004101000039000000040010043f0000007e01000041000001b300010430000001aa002104210000000102000039000000000001042d0000000002000019000000000001042d000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b300010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000e516761e0000000000000000000000000000000000000000000000000000000079c4f929000000000000000000000000000000000000000000000000000000004c6314f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff43616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000039b34c6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000c94722ff13eacf53547c4741dab5228353a05938ffcdd5d4a2d533ae0e6182874e487b710000000000000000000000000000000000000000000000000000000043616c6c61626c65206f6e6c792062792074686520636f6d70726573736f72007368000000000000000000000000000000000000000000000000000000000000496e636f72726563746c7920666f726d61747465642062797465636f646548610000000000000000000000000000000000000084000000000000000000000000436f6465206c656e67746820696e20776f726473206d757374206265206f6464000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000006aca1b77b249f1e5f885db2cd6e516c14e81511f82dd4bd0f8bb4ac27ba50922", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/L1Messenger.json b/src/deps/contracts/L1Messenger.json index 86ea5a0b..63cc63f4 100644 --- a/src/deps/contracts/L1Messenger.json +++ b/src/deps/contracts/L1Messenger.json @@ -161,8 +161,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002ab0430019700030000004103550002000000010355000002ab0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002ad0210009c000000530000213d000002b00210009c000000900000613d000002b10110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000600310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002ec0130009c000001710000413d0000006401400039000002ed0200004100000000002104350000004401400039000002ee020000410000000000210435000000240140003900000034020000390000000000210435000002c5010000410000000000140435000000040140003900000020020000390000000000210435000002ab01000041000002ab0240009c00000000010440190000004001100210000002cd011001c700000aa7000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002ac0100004100000aa60001042e000002ae0210009c000000aa0000613d000002af0110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b30420009c000000bb0000213d0000002304200039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b30350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000002010000813d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa7000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000200310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000001670000c13d00000004010000390000000201100367000000000101043b0aa509390000040f000000000100001900000aa60001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aa70001043000000002020003670000000403200370000000000303043b000002b30430009c000000bb0000213d0000002304300039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b30440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000002150000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000000101043b000300000001001d000000400100043d000b00000001001d000002c80110009c000002900000213d0000000301000029000000e0061002700000000b02000029000002c901200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000000f60000413d000a00000005001d00000004020000390000000301000029000002b50110009c0000000008000019000002b10000813d000d00000002001d000000000100041a000000000118004b0000034b0000c13d0000000301000029000002ce0110009c0000000a040000290000000b03000029000001180000213d0000000001030433000000000161004b000001610000a13d00000005016002100000000001410019000002cf0200004100000000002104350000000101600039000007ff0260008c00000000060100190000010d0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000001610000a13d00000001022001bf000000000121004b000001610000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700000006020000290aa50a9b0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000001610000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000001210000413d0000000501000029000000030110008c0000011c0000213d0000000001030433000000000101004b000004c50000c13d000002ea0100004100000000001004350000003201000039000000040010043f000002eb0100004100000aa700010430000002c501000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002ef01000041000000c40010043f000002f00100004100000aa700010430000c00000003001d000d00000002001d000002b9010000410000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b02000039000e00000004001d0aa50a9b0000040f0000000e0a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018d0000413d000000000705004b000001a40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000001db0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0aa5088a0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350aa508960000040f000e00000001001d0aa50a7f0000040f000000400100043d0000000e020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400200043d0000001f0430018f0000000503300272000001e80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001e00000413d000000000504004b000001f70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000002ab0410009c000002270000a13d000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002c703000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000e00000007001d000d00000005001d0000000002230049000002ab02200197000c00000006001d000002ab03600197000000020330036700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000002960000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f043000390000000504400272000002570000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000024f0000413d000000000400004b000002590000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000002690000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000002610000413d000000000604004b000002780000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cc0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002b70310009c0000037b0000a13d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa7000104300000001f0430018f0000000502300272000002a10000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000029a0000413d000000000504004b000002af0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000000401000039000000590200008a000600000002001d00000000080000190000000007000019000500000006001d00000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002ab032001970000000604000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000008001d000e00000007001d0000000203300367000002ca0510009c000002030000813d0000000002240049000002ab0220019700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000003600000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c0000000e09000029000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000002f90000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002f10000413d000000000400004b000002fb0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000030a0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000003020000413d0000001f03300190000003190000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000001610000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000e0700002900000001022001900000000506000029000000bb0000613d000000000801043b0000000107700039000000000167004b0000000d020000290000000001020019000002b70000413d000001040000013d000000400100043d0000006402100039000002cb0300004100000000003204350000004402100039000002cc03000041000000000032043500000024021000390000003c030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa7000104300000001f0430018f00000005023002720000036b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003640000413d000000000504004b000003790000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002b901000041000000400400043d000900000004001d0000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b020000390aa50a9b0000040f000000090a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b60000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ae0000413d00000000090a0019000000000705004b000003c60000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000049f0000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b30220009c000002900000213d0000000101100190000002900000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bb0220009c000002900000213d0000000703000029000000c002300039000000400020043f0000000004000410000002bc024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002bd060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002be0120009c000002900000213d0000008001200039000000400010043f000002ab01000041000002ab0430009c000000000301801900000040033002100000000002020433000002ab0420009c00000000020180190000006002200210000000000232019f0000000003000414000002ab0430009c0000000001034019000000c001100210000000000121019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000005000414000002ab0450009c00000000010540190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002ab0310019700000000412300a9000002c102200197000002c10410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000c801100039000000000121001a0000008a0000413d000002ab0210009c000002030000213d0000000002100420000000400100043d000000000202004b000006e90000c13d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400200043d0000001f0430018f0000000503300272000004ac0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004a40000413d000000000504004b000004bb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b50210009c0000000007000019000005320000813d0000000201000039000300000001001d000000000101041a000000000117004b000005de0000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b50210009c000b00000000001d000006110000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006bc0000c13d00000008010000290000000e02000029000000000112004b000001610000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e202200197000002bd0220009c000006d40000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000001610000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002e50550009c000007930000413d000000400100043d0000004402100039000002e9030000410000000000320435000002c502000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000005f60000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005810000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005790000413d000000000400004b000005830000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005920000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000058a0000413d0000001f03300190000005a10000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005360000413d000004da0000013d000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000008402100039000002d10300004100000000003204350000006402100039000002d20300004100000000003204350000004402100039000002d3030000410000000000320435000000240210003900000044030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa7000104300000001f0430018f0000000502300272000006010000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005fa0000413d000000000504004b0000060f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002d503200198000007300000c13d000002d70320009c000007420000813d000002d802200198000007540000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00000002020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000007660000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000066a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006620000413d000000000400004b0000066c0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000067b0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006730000413d0000001f033001900000068a0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007810000c13d0000000001020433000002da011001970000000d02000029000000db02200210000002db02200197000000000112019f000002bd021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006150000413d000004ee0000013d000000400100043d0000008402100039000002df0300004100000000003204350000006402100039000002e00300004100000000003204350000004402100039000002e103000041000000000032043500000024021000390000005e030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa700010430000000400100043d0000006402100039000002e30300004100000000003204350000004402100039000002e4030000410000000000320435000000240210003900000027030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa700010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fc0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f40000413d000000000603004b0000070b0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002ab03000041000002ab0410009c00000000010380190000004001100210000002ab0420009c00000000020380190000006002200210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c70000800d020000390000000303000039000002c20400004100000001050000290000000b060000290aa50a960000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400100043d0000004402100039000002d6030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002dd030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f0000000502300272000007710000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000076a0000413d000000000504004b0000077f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000400100043d0000004402100039000002d9030000410000000000320435000000240210003900000019030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b50770009c000007a40000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002e60400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007c70000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007bf0000413d00000007070000290000000007720019000000000206004b000007d80000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002e702200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000007ef0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007e70000413d000000000603004b000007fe0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002e8011001970000000e0400002900000000014100490000000001210019000002ab02000041000002ab0340009c000000000302001900000000030440190000004003300210000002ab0410009c00000000010280190000006001100210000000000131019f0000000003000414000002ab0430009c0000000002034019000000c002200210000000000112019f0000800e020000390aa50a960000040f00000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008280000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000081f0000413d000000000705004b000008380000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008640000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0aa509bb0000040f0000000501000029000000000010041d00000007010000290000000c020000290aa509d30000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000aa60001042e000000400200043d0000001f0430018f0000000503300272000008710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000008690000413d000000000504004b000008800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000400100043d000002f10210009c000008900000813d000000c002100039000000400020043f000000000001042d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa70001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002bd03000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f20310009c0000092d0000813d0000008003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002b70310009c0000092d0000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009330000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000004000414000002ab0540009c00000000010440190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f00000001012001900000092b0000613d0000000101000029000000000001042d000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa70001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f30350009c000009920000813d0000006003500039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001050433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000009900000613d000000000101043b0000000102000029000000000012041b0000000001000413000002ab031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000098a0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000098a0000c13d0000000001210019000002f40210009c000009980000813d00000028011000390000000002100420000000400100043d000000000202004b000009aa0000613d0000000000610435000002ab020000410000000003000414000002ab0430009c0000000003028019000002ab0410009c00000000010280190000004001100210000000c002300210000000000112019f000002f5011001c70000800d020000390000000103000039000002f6040000410aa50a960000040f0000000101200190000009900000613d000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000000101004b000009be0000613d000000000001042d000000400100043d0000006402100039000002f70300004100000000003204350000004402100039000002f803000041000000000032043500000024021000390000002a030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa70001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002ab02100197000000010150019000000a320000c13d0000000001000031000000000541004b00000a320000413d0000000202200367000002ca0530009c00000a380000813d0000000001410049000002ab0110019700000000011203df000000c002300210000002b402200197000002b5022001c700000000012103af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab033001970003000000010355000000010220019000000a4a0000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c00000a650000213d000000010440019000000a650000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a0c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a040000413d000000000400004b00000a0e0000613d0000000104000031000000000443004b00000a6b0000213d00000003050003670000001f0430018f000000050330027200000a1e0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a160000413d000000000604004b00000a2d0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a6d0000c13d0000000001020433000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f000000050230027200000a550000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a4e0000413d000000000504004b00000a630000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000a0010000390000000001100420000000000101004b00000a840000613d000000000001042d000000400100043d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa70001043000000a99002104210000000102000039000000000001042d0000000002000019000000000001042d00000a9e002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa3002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa50000043200000aa60001042e00000aa700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f6164657200000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000222305643f63f80b694ef06950a98ab89c3d931c7ae594c7060e2c19ebf144a0", - "deployedBytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002ab0430019700030000004103550002000000010355000002ab0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002ad0210009c000000530000213d000002b00210009c000000900000613d000002b10110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000600310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002ec0130009c000001710000413d0000006401400039000002ed0200004100000000002104350000004401400039000002ee020000410000000000210435000000240140003900000034020000390000000000210435000002c5010000410000000000140435000000040140003900000020020000390000000000210435000002ab01000041000002ab0240009c00000000010440190000004001100210000002cd011001c700000aa7000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002ac0100004100000aa60001042e000002ae0210009c000000aa0000613d000002af0110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b30420009c000000bb0000213d0000002304200039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b30350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000002010000813d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa7000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b202000041000000200310008c00000000030000190000000003024019000002b201100197000000000401004b000000000200a019000002b20110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000001670000c13d00000004010000390000000201100367000000000101043b0aa509390000040f000000000100001900000aa60001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b203000041000000200420008c00000000040000190000000004034019000002b202200197000000000502004b000000000300a019000002b20220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aa70001043000000002020003670000000403200370000000000303043b000002b30430009c000000bb0000213d0000002304300039000002b205000041000000000614004b00000000060000190000000006058019000002b207100197000002b204400197000000000874004b0000000005008019000000000474013f000002b20440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b30440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000002150000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000000101043b000300000001001d000000400100043d000b00000001001d000002c80110009c000002900000213d0000000301000029000000e0061002700000000b02000029000002c901200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000000f60000413d000a00000005001d00000004020000390000000301000029000002b50110009c0000000008000019000002b10000813d000d00000002001d000000000100041a000000000118004b0000034b0000c13d0000000301000029000002ce0110009c0000000a040000290000000b03000029000001180000213d0000000001030433000000000161004b000001610000a13d00000005016002100000000001410019000002cf0200004100000000002104350000000101600039000007ff0260008c00000000060100190000010d0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000001610000a13d00000001022001bf000000000121004b000001610000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700000006020000290aa50a9b0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000001610000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000001210000413d0000000501000029000000030110008c0000011c0000213d0000000001030433000000000101004b000004c50000c13d000002ea0100004100000000001004350000003201000039000000040010043f000002eb0100004100000aa700010430000002c501000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002ef01000041000000c40010043f000002f00100004100000aa700010430000c00000003001d000d00000002001d000002b9010000410000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b02000039000e00000004001d0aa50a9b0000040f0000000e0a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001950000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000018d0000413d000000000705004b000001a40000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000001db0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0aa5088a0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350aa508960000040f000e00000001001d0aa50a7f0000040f000000400100043d0000000e020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400200043d0000001f0430018f0000000503300272000001e80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001e00000413d000000000504004b000001f70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000002ab0410009c000002270000a13d000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002c703000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000e00000007001d000d00000005001d0000000002230049000002ab02200197000c00000006001d000002ab03600197000000020330036700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000002960000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f043000390000000504400272000002570000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000024f0000413d000000000400004b000002590000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000002690000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000002610000413d000000000604004b000002780000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005cc0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002b70310009c0000037b0000a13d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa7000104300000001f0430018f0000000502300272000002a10000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000029a0000413d000000000504004b000002af0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000000401000039000000590200008a000600000002001d00000000080000190000000007000019000500000006001d00000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002ab032001970000000604000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000008001d000e00000007001d0000000203300367000002ca0510009c000002030000813d0000000002240049000002ab0220019700000000022303df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000003600000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c0000000e09000029000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000002f90000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000002f10000413d000000000400004b000002fb0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000030a0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000003020000413d0000001f03300190000003190000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000001610000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000e0700002900000001022001900000000506000029000000bb0000613d000000000801043b0000000107700039000000000167004b0000000d020000290000000001020019000002b70000413d000001040000013d000000400100043d0000006402100039000002cb0300004100000000003204350000004402100039000002cc03000041000000000032043500000024021000390000003c030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa7000104300000001f0430018f00000005023002720000036b0000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000003640000413d000000000504004b000003790000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa7000104300000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002b901000041000000400400043d000900000004001d0000000000140435000002ab010000410000000002000414000002ab0320009c0000000002018019000002ab0340009c00000000010440190000004001100210000000c002200210000000000112019f000002ba011001c70000800b020000390aa50a9b0000040f000000090a00002900000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003b60000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000003ae0000413d00000000090a0019000000000705004b000003c60000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000049f0000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b30220009c000002900000213d0000000101100190000002900000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bb0220009c000002900000213d0000000703000029000000c002300039000000400020043f0000000004000410000002bc024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002bd060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002be0120009c000002900000213d0000008001200039000000400010043f000002ab01000041000002ab0430009c000000000301801900000040033002100000000002020433000002ab0420009c00000000020180190000006002200210000000000232019f0000000003000414000002ab0430009c0000000001034019000000c001100210000000000121019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000005000414000002ab0450009c00000000010540190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002ab0310019700000000412300a9000002c102200197000002c10410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000c801100039000000000121001a0000008a0000413d000002ab0210009c000002030000213d0000000002100420000000400100043d000000000202004b000006e90000c13d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400200043d0000001f0430018f0000000503300272000004ac0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004a40000413d000000000504004b000004bb0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b50210009c0000000007000019000005320000813d0000000201000039000300000001001d000000000101041a000000000117004b000005de0000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b50210009c000b00000000001d000006110000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006bc0000c13d00000008010000290000000e02000029000000000112004b000001610000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e202200197000002bd0220009c000006d40000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000001610000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002e50550009c000007930000413d000000400100043d0000004402100039000002e9030000410000000000320435000002c502000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000005f60000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005810000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000005790000413d000000000400004b000005830000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005920000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000058a0000413d0000001f03300190000005a10000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005cc0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005360000413d000004da0000013d000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000008402100039000002d10300004100000000003204350000006402100039000002d20300004100000000003204350000004402100039000002d3030000410000000000320435000000240210003900000044030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa7000104300000001f0430018f0000000502300272000006010000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b000005fa0000413d000000000504004b0000060f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002d503200198000007300000c13d000002d70320009c000007420000813d000002d802200198000007540000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002ab043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002ab0510009c000002030000213d0000000002230049000002ab0220019700000000022403df000000c001100210000002b401100197000002b5011001c700000000011203af00000002020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab0330019700030000000103550000000102200190000007660000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c000002900000213d0000000104400190000002900000c13d000000400020043f00000000023104360000001f0430003900000005044002720000066a0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006620000413d000000000400004b0000066c0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000067b0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006730000413d0000001f033001900000068a0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007810000c13d0000000001020433000002da011001970000000d02000029000000db02200210000002db02200197000000000112019f000002bd021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002b70310009c000002900000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006150000413d000004ee0000013d000000400100043d0000008402100039000002df0300004100000000003204350000006402100039000002e00300004100000000003204350000004402100039000002e103000041000000000032043500000024021000390000005e030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002d4011001c700000aa700010430000000400100043d0000006402100039000002e30300004100000000003204350000004402100039000002e4030000410000000000320435000000240210003900000027030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa700010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fc0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f40000413d000000000603004b0000070b0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002ab03000041000002ab0410009c00000000010380190000004001100210000002ab0420009c00000000020380190000006002200210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c70000800d020000390000000303000039000002c20400004100000001050000290000000b060000290aa50a960000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c3011001c700000aa60001042e000000400100043d0000004402100039000002d6030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000400100043d0000004402100039000002dd030000410000000000320435000000240210003900000003030000290000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f0000000502300272000007710000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000076a0000413d000000000504004b0000077f0000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000000400100043d0000004402100039000002d9030000410000000000320435000000240210003900000019030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b50770009c000007a40000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002e60400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007c70000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007bf0000413d00000007070000290000000007720019000000000206004b000007d80000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002e702200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000007ef0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007e70000413d000000000603004b000007fe0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002e8011001970000000e0400002900000000014100490000000001210019000002ab02000041000002ab0340009c000000000302001900000000030440190000004003300210000002ab0410009c00000000010280190000006001100210000000000131019f0000000003000414000002ab0430009c0000000002034019000000c002200210000000000112019f0000800e020000390aa50a960000040f00000000030100190000006003300270000002ab03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008280000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000081f0000413d000000000705004b000008380000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008640000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b30410009c000002900000213d0000000102200190000002900000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0aa509bb0000040f0000000501000029000000000010041d00000007010000290000000c020000290aa509d30000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000aa60001042e000000400200043d0000001f0430018f0000000503300272000008710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000008690000413d000000000504004b000008800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002ab010000410000000103000031000002ab0430009c0000000003018019000002ab0420009c000000000102401900000040011002100000006002300210000000000112019f00000aa700010430000000400100043d000002f10210009c000008900000813d000000c002100039000000400020043f000000000001042d000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa70001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002bd03000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f20310009c0000092d0000813d0000008003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002b70310009c0000092d0000213d0000006003100039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001010433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f00000001022001900000092b0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009330000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002bc0110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002ab01000041000002ab0420009c00000000020180190000000004000414000002ab0540009c00000000010440190000004002200210000000c001100210000000000121019f000002bf011001c70000800d02000039000002c0040000410aa50a960000040f00000001012001900000092b0000613d0000000101000029000000000001042d000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa70001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f30350009c000009920000813d0000006003500039000000400030043f000002ab03000041000002ab0420009c000000000203801900000040022002100000000001050433000002ab0410009c00000000010380190000006001100210000000000121019f0000000002000414000002ab0420009c0000000002038019000000c002200210000000000112019f000002b8011001c700008010020000390aa50a9b0000040f0000000102200190000009900000613d000000000101043b0000000102000029000000000012041b0000000001000413000002ab031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000098a0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000098a0000c13d0000000001210019000002f40210009c000009980000813d00000028011000390000000002100420000000400100043d000000000202004b000009aa0000613d0000000000610435000002ab020000410000000003000414000002ab0430009c0000000003028019000002ab0410009c00000000010280190000004001100210000000c002300210000000000112019f000002f5011001c70000800d020000390000000103000039000002f6040000410aa50a960000040f0000000101200190000009900000613d000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000000101004b000009be0000613d000000000001042d000000400100043d0000006402100039000002f70300004100000000003204350000004402100039000002f803000041000000000032043500000024021000390000002a030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002cd011001c700000aa70001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002ab02100197000000010150019000000a320000c13d0000000001000031000000000541004b00000a320000413d0000000202200367000002ca0530009c00000a380000813d0000000001410049000002ab0110019700000000011203df000000c002300210000002b402200197000002b5022001c700000000012103af00008010020000390aa50aa00000040f00000000030100190000006003300270000102ab0030019d000002ab033001970003000000010355000000010220019000000a4a0000613d0000003f01300039000002b602100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b30520009c00000a650000213d000000010440019000000a650000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a0c0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a040000413d000000000400004b00000a0e0000613d0000000104000031000000000443004b00000a6b0000213d00000003050003670000001f0430018f000000050330027200000a1e0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a160000413d000000000604004b00000a2d0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a6d0000c13d0000000001020433000000000001042d000002ea0100004100000000001004350000001101000039000000040010043f000002eb0100004100000aa700010430000000400100043d0000004402100039000002dc030000410000000000320435000000240210003900000008030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa7000104300000001f0430018f000000050230027200000a550000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a4e0000413d000000000504004b00000a630000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aa700010430000002ea0100004100000000001004350000004101000039000000040010043f000002eb0100004100000aa700010430000000000100001900000aa700010430000000400100043d0000004402100039000002d003000041000000000032043500000024021000390000001f030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa700010430000000a0010000390000000001100420000000000101004b00000a840000613d000000000001042d000000400100043d0000004402100039000002c4030000410000000000320435000000240210003900000014030000390000000000320435000002c5020000410000000000210435000000040210003900000020030000390000000000320435000002ab02000041000002ab0310009c00000000010280190000004001100210000002c6011001c700000aa70001043000000a99002104210000000102000039000000000001042d0000000002000019000000000001042d00000a9e002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa3002104230000000102000039000000000001042d0000000002000019000000000001042d00000aa50000043200000aa60001042e00000aa700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f6164657200000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000222305643f63f80b694ef06950a98ab89c3d931c7ae594c7060e2c19ebf144a0", + "bytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002af0430019700030000004103550002000000010355000002af0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002b10210009c000000530000213d000002b40210009c000000900000613d000002b50110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000600310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002f20130009c000001040000413d0000006401400039000002f30200004100000000002104350000004401400039000002f4020000410000000000210435000000240140003900000034020000390000000000210435000002c9010000410000000000140435000000040140003900000020020000390000000000210435000002af01000041000002af0240009c00000000010440190000004001100210000002d2011001c700000aba000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002b00100004100000ab90001042e000002b20210009c000000aa0000613d000002b30110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b70420009c000000bb0000213d0000002304200039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b70350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000001940000813d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000200310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000000fa0000c13d00000004010000390000000201100367000000000101043b0ab8094c0000040f000000000100001900000ab90001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aba0001043000000002020003670000000403200370000000000303043b000002b70430009c000000bb0000213d0000002304300039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b70440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000001a80000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000400300043d000000000201043b000002cc0120009c000003620000413d0000004401300039000002f1020000410000000000210435000000240130003900000014020000390000000000210435000002c9010000410000000000130435000000040130003900000020020000390000000000210435000002af01000041000002af0230009c00000000010340190000004001100210000002ca011001c700000aba00010430000002c901000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002f501000041000000c40010043f000002f60100004100000aba00010430000c00000003001d000d00000002001d000002bd010000410000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b02000039000e00000004001d0ab80aae0000040f0000000e0a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001280000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001200000413d000000000705004b000001370000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000016e0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0ab8089d0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350ab808a90000040f000e00000001001d0ab80a920000040f000000400100043d0000000e020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400200043d0000001f0430018f00000005033002720000017b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001730000413d000000000504004b0000018a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000002af0410009c000001ba0000a13d000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002cb03000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000e00000007001d000d00000005001d0000000002230049000002af02200197000c00000006001d000002af03600197000000020330036700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000003470000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f043000390000000504400272000001ea0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000001e20000413d000000000400004b000001ec0000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000001fc0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001f40000413d000000000604004b0000020b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005df0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002bd01000041000000400400043d000900000004001d0000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b020000390ab80aae0000040f000000090a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000025e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002560000413d00000000090a0019000000000705004b0000026e0000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004b20000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b70220009c000003660000213d0000000101100190000003660000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bf0220009c000003660000213d0000000703000029000000c002300039000000400020043f0000000004000410000002c0024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002c1060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002c20120009c000003660000213d0000008001200039000000400010043f000002af01000041000002af0430009c000000000301801900000040033002100000000002020433000002af0420009c00000000020180190000006002200210000000000232019f0000000003000414000002af0430009c0000000001034019000000c001100210000000000121019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000005000414000002af0450009c00000000010540190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002af0310019700000000412300a9000002c502200197000002c50410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000a001100039000000000121001a0000008a0000413d000002af0210009c000001960000213d0000000002100420000000400100043d000000000202004b000006e70000c13d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000003520000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000034b0000413d000000000504004b000003600000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000300000002001d000b00000003001d000002cd0130009c0000036c0000a13d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba000104300000000307000029000000e0067002700000000b02000029000002ce01200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000003770000413d000a00000005001d0000000402000039000002b90170009c0000000007000019000600000006001d000003e90000813d000d00000002001d000000000100041a000000000117004b000004820000c13d0000000301000029000002d30110009c0000000b030000290000000a0400002900000006050000290000039a0000213d0000000001030433000000000151004b000003e30000a13d00000005015002100000000001410019000002d40200004100000000002104350000000101500039000007ff0250008c00000000050100190000038f0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000003e30000a13d00000001022001bf000000000121004b000003e30000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700000006020000290ab80aae0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000003e30000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000003a30000413d0000000501000029000000030110008c0000039e0000213d0000000001030433000000000101004b000004d80000c13d000002ef0100004100000000001004350000003201000039000000040010043f000002f00100004100000aba000104300000000401000039000000590200008a000500000002001d0000000007000019000000000600001900000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002af032001970000000504000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000007001d000e00000006001d0000000203300367000002cf0510009c000001960000813d0000000002240049000002af0220019700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000004970000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c0000000e09000029000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000004300000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004280000413d000000000400004b000004320000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000004410000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000004390000413d0000001f03300190000004500000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000003e30000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000e0600002900000001022001900000000602000029000000bb0000613d000000000701043b0000000106600039000000000126004b0000000d020000290000000001020019000003ee0000413d000003850000013d000000400100043d0000006402100039000002d00300004100000000003204350000004402100039000002d103000041000000000032043500000024021000390000003c030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba000104300000001f0430018f0000000502300272000004a20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000049b0000413d000000000504004b000004b00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400200043d0000001f0430018f0000000503300272000004bf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004b70000413d000000000504004b000004ce0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b90210009c0000000007000019000005450000813d0000000201000039000300000001001d000000000101041a000000000117004b000005f10000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b90210009c000b00000000001d000006240000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006cf0000c13d00000008010000290000000e02000029000000000112004b000003e30000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e702200197000002c10220009c0000072e0000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000003e30000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002ea0550009c000007a60000413d000000400100043d0000004402100039000002ee030000410000000000320435000002c902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000006090000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005940000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000058c0000413d000000000400004b000005960000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005a50000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000059d0000413d0000001f03300190000005b40000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005490000413d000004ed0000013d000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000008402100039000002d60300004100000000003204350000006402100039000002d70300004100000000003204350000004402100039000002d8030000410000000000320435000000240210003900000044030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba000104300000001f0430018f0000000502300272000006140000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000060d0000413d000000000504004b000006220000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002da03200198000007430000c13d000002dc0320009c000007550000813d000002dd02200198000007670000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00000002020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000007790000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000067d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006750000413d000000000400004b0000067f0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000068e0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006860000413d0000001f033001900000069d0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007940000c13d0000000001020433000002df011001970000000d02000029000000db02200210000002e002200197000000000112019f000002c1021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006280000413d000005010000013d000000400100043d0000008402100039000002e40300004100000000003204350000006402100039000002e50300004100000000003204350000004402100039000002e603000041000000000032043500000024021000390000005e030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba00010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fa0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f20000413d000000000603004b000007090000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002af03000041000002af0410009c00000000010380190000004001100210000002af0420009c00000000020380190000006002200210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c70000800d020000390000000303000039000002c60400004100000001050000290000000b060000290ab80aa90000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400100043d0000006402100039000002e80300004100000000003204350000004402100039000002e9030000410000000000320435000000240210003900000027030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba00010430000000400100043d0000004402100039000002db030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e3030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e2030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000007840000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000077d0000413d000000000504004b000007920000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000019030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b90770009c000007b70000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002eb0400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007da0000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007d20000413d00000007070000290000000007720019000000000206004b000007eb0000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002ec02200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000008020000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007fa0000413d000000000603004b000008110000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002ed011001970000000e0400002900000000014100490000000001210019000002af02000041000002af0340009c000000000302001900000000030440190000004003300210000002af0410009c00000000010280190000006001100210000000000131019f0000000003000414000002af0430009c0000000002034019000000c002200210000000000112019f0000800e020000390ab80aa90000040f00000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000083b0000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008320000413d000000000705004b0000084b0000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008770000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0ab809ce0000040f0000000501000029000000000010041d00000007010000290000000c020000290ab809e60000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000ab90001042e000000400200043d0000001f0430018f0000000503300272000008840000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087c0000413d000000000504004b000008930000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000400100043d000002f70210009c000008a30000813d000000c002100039000000400020043f000000000001042d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba0001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002c103000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f80310009c000009400000813d0000008003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002bb0310009c000009400000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009460000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000004000414000002af0540009c00000000010440190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f00000001012001900000093e0000613d0000000101000029000000000001042d000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba0001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f90350009c000009a50000813d0000006003500039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001050433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000009a30000613d000000000101043b0000000102000029000000000012041b0000000001000413000002af031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000099d0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000099d0000c13d0000000001210019000002fa0210009c000009ab0000813d00000028011000390000000002100420000000400100043d000000000202004b000009bd0000613d0000000000610435000002af020000410000000003000414000002af0430009c0000000003028019000002af0410009c00000000010280190000004001100210000000c002300210000000000112019f000002fb011001c70000800d020000390000000103000039000002fc040000410ab80aa90000040f0000000101200190000009a30000613d000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000000101004b000009d10000613d000000000001042d000000400100043d0000006402100039000002fd0300004100000000003204350000004402100039000002fe03000041000000000032043500000024021000390000002a030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba0001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002af02100197000000010150019000000a450000c13d0000000001000031000000000541004b00000a450000413d0000000202200367000002cf0530009c00000a4b0000813d0000000001410049000002af0110019700000000011203df000000c002300210000002b802200197000002b9022001c700000000012103af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af033001970003000000010355000000010220019000000a5d0000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c00000a780000213d000000010440019000000a780000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a1f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a170000413d000000000400004b00000a210000613d0000000104000031000000000443004b00000a7e0000213d00000003050003670000001f0430018f000000050330027200000a310000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a290000413d000000000604004b00000a400000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a800000c13d0000000001020433000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f000000050230027200000a680000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a610000413d000000000504004b00000a760000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000078010000390000000001100420000000000101004b00000a970000613d000000000001042d000000400100043d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000aac002104210000000102000039000000000001042d0000000002000019000000000001042d00000ab1002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab6002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab80000043200000ab90001042e00000aba00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000546f6f206d616e79204c322d3e4c31206c6f677300000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000918be26e3402038993f44a7d3e3c4373187a68986a393c0b39192bb13d9ba4c6", + "deployedBytecode": "0x0004000000000002000e00000000000200000000030100190000006003300270000002af0430019700030000004103550002000000010355000002af0030019d000100000000001f0000008003000039000000400030043f00000001012001900000004b0000c13d000400000003001d0000000001000031000000040110008c000000bb0000413d0000000201000367000000000101043b000000e001100270000002b10210009c000000530000213d000002b40210009c000000900000613d000002b50110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000600310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d00000004010000390000000201100367000000000201043b000000000102004b0000000001000019000000010100c039000000000112004b000000bb0000c13d000000400400043d0000000003000411000002f20130009c000001040000413d0000006401400039000002f30200004100000000002104350000004401400039000002f4020000410000000000210435000000240140003900000034020000390000000000210435000002c9010000410000000000140435000000040140003900000020020000390000000000210435000002af01000041000002af0240009c00000000010440190000004001100210000002d2011001c700000aba000104300000000001000416000000000101004b000000bb0000c13d000000200100003900000100001004430000012000000443000002b00100004100000ab90001042e000002b20210009c000000aa0000613d000002b30110009c000000bb0000c13d0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bb0000c13d00000002030003670000000402300370000000000202043b000002b70420009c000000bb0000213d0000002304200039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404200039000000000343034f000000000503043b000002b70350009c000000bb0000213d00000024062000390000000002650019000000000112004b000000bb0000213d000000000700041400000000010004140000000003000031000000000423004b000001940000813d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba000104300000000001000416000000000101004b000000bb0000c13d000000040100008a0000000001100031000002b602000041000000200310008c00000000030000190000000003024019000002b601100197000000000401004b000000000200a019000002b60110009c00000000010300190000000001026019000000000101004b000000bb0000c13d0000000001000411000080040110008c000000fa0000c13d00000004010000390000000201100367000000000101043b0ab8094c0000040f000000000100001900000ab90001042e0000000001000416000000000101004b000000bb0000c13d0000000001000031000000040210008a000002b603000041000000200420008c00000000040000190000000004034019000002b602200197000000000502004b000000000300a019000002b60220009c00000000020400190000000002036019000000000202004b000000bd0000613d000000000100001900000aba0001043000000002020003670000000403200370000000000303043b000002b70430009c000000bb0000213d0000002304300039000002b605000041000000000614004b00000000060000190000000006058019000002b607100197000002b604400197000000000874004b0000000005008019000000000474013f000002b60440009c00000000040600190000000004056019000000000404004b000000bb0000c13d0000000404300039000000000442034f000000000404043b000800000004001d000002b70440009c000000bb0000213d0000002403300039000700000003001d00000008040000290000000003340019000000000113004b000000bb0000213d0000000001000411000080010110008c000001a80000c13d0000000801000029000000040110008c000000bb0000413d0000000701000029000000000112034f000000400300043d000000000201043b000002cc0120009c000003620000413d0000004401300039000002f1020000410000000000210435000000240130003900000014020000390000000000210435000002c9010000410000000000130435000000040130003900000020020000390000000000210435000002af01000041000002af0230009c00000000010340190000004001100210000002ca011001c700000aba00010430000002c901000041000000800010043f0000002001000039000000840010043f0000001401000039000000a40010043f000002f501000041000000c40010043f000002f60100004100000aba00010430000c00000003001d000d00000002001d000002bd010000410000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b02000039000e00000004001d0ab80aae0000040f0000000e0a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001280000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001200000413d000000000705004b000001370000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000016e0000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c0000000d02000029000000bb0000413d00000000030a04330000ffff0130008c000000bb0000213d000e00000003001d0ab8089d0000040f00000060021000390000000c03000029000000000032043500000040021000390000000e03000029000000000032043500000020021000390000000d030000290000000000320435000000000001043500000024020000390000000202200367000000000202043b0000008003100039000000000023043500000044020000390000000202200367000000000202043b000000a00310003900000000002304350ab808a90000040f000e00000001001d0ab80a920000040f000000400100043d0000000e020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400200043d0000001f0430018f00000005033002720000017b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000001730000413d000000000504004b0000018a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000002af0410009c000001ba0000a13d000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002cb03000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000e00000007001d000d00000005001d0000000002230049000002af02200197000c00000006001d000002af03600197000000020330036700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000003470000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f043000390000000504400272000001ea0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000001e20000413d000000000400004b000001ec0000613d0000000104000031000000000443004b000000bb0000213d00000003050003670000001f0430018f0000000503300272000001fc0000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000001f40000413d000000000604004b0000020b0000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c000005df0000c13d0000000001020433000b00000001001d00000000020004140000000e01000029000a00000002001d000000000121004b0000008a0000413d0000000201000039000900000001001d000000000301041a000000400100043d00000040021000390000000b040000290000000000420435000000200210003900000000003204350000004003000039000800000003001d0000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b0000000902000029000000000012041b000002bd01000041000000400400043d000900000004001d0000000000140435000002af010000410000000002000414000002af0320009c0000000002018019000002af0340009c00000000010440190000004001100210000000c002200210000000000112019f000002be011001c70000800b020000390ab80aae0000040f000000090a00002900000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000025e0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002560000413d00000000090a0019000000000705004b0000026e0000613d0000000506600210000000000761034f00000000066900190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000004b20000613d0000001f01400039000000600110018f0000000002910019000000000112004b00000000010000190000000101004039000700000002001d000002b70220009c000003660000213d0000000101100190000003660000c13d0000000701000029000000400010043f000000200130008c000000bb0000413d00000000010904330000ffff0210008c000000bb0000213d0000000702000029000002bf0220009c000003660000213d0000000703000029000000c002300039000000400020043f0000000004000410000002c0024001970000006005300039000500000005001d000000000025043500000020053000390000000102000039000900000002001d000300000005001d0000000000250435000000a0023000390000000b07000029000600000002001d000000000072043500000080023000390000000008000411000400000002001d000000000082043500000000000304350000004002300039000200000002001d0000000000120435000000400200043d000000200320003900000000000304350000002105200039000002c1060000410000000000650435000000f0011002100000002205200039000000000015043500000060014002100000002404200039000000000014043500000058012000390000000000710435000000580100003900000000001204350000003801200039000100000008001d0000000000810435000002c20120009c000003660000213d0000008001200039000000400010043f000002af01000041000002af0430009c000000000301801900000040033002100000000002020433000002af0420009c00000000020180190000006002200210000000000232019f0000000003000414000002af0430009c0000000001034019000000c001100210000000000121019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000008030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000000000010041b0000000901000029000000000101041a000000010200008a000000000221004b0000008a0000613d00000001011000390000000903000029000000000013041b00000007010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000020100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000040100002900000000010104330000008004200039000000000014043500000006010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000005000414000002af0450009c00000000010540190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f0000000d030000290000000101200190000000bb0000613d0000005c023000390000000001000413000002af0310019700000000412300a9000002c502200197000002c50410019700000000422400d9000000000223004b0000000e020000290000008a0000c13d0000000a030000290000000002320049000000a001100039000000000121001a0000008a0000413d000002af0210009c000001960000213d0000000002100420000000400100043d000000000202004b000006e70000c13d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000003520000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000034b0000413d000000000504004b000003600000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000300000002001d000b00000003001d000002cd0130009c0000036c0000a13d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba000104300000000307000029000000e0067002700000000b02000029000002ce01200041000000400010043f0000080001000039000900000001001d000000000512043600000000010000310000000201100367000000000200001900000005032002100000000004350019000000000331034f000000000303043b00000000003404350000000102200039000008000320008c000003770000413d000a00000005001d0000000402000039000002b90170009c0000000007000019000600000006001d000003e90000813d000d00000002001d000000000100041a000000000117004b000004820000c13d0000000301000029000002d30110009c0000000b030000290000000a0400002900000006050000290000039a0000213d0000000001030433000000000151004b000003e30000a13d00000005015002100000000001410019000002d40200004100000000002104350000000101500039000007ff0250008c00000000050100190000038f0000413d0000004001000039000c00000001001d0000801001000039000600000001001d0000000901000029000500000001001d0000000101100270000900000001001d000000000500001900000000010304330000000102500210000000000321004b000003e30000a13d00000001022001bf000000000121004b000003e30000a13d00000005012002100000000001410019000e00000005001d0000000602500210000000000242001900000000030204330000000002010433000000400100043d00000040041000390000000000240435000000200210003900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700000006020000290ab80aae0000040f0000000102200190000000bb0000613d0000000b0300002900000000020304330000000e05000029000000000252004b0000000a04000029000003e30000a13d00000005025002100000000002420019000000000101043b000000000012043500000001055000390000000901000029000000000115004b000003a30000413d0000000501000029000000030110008c0000039e0000213d0000000001030433000000000101004b000004d80000c13d000002ef0100004100000000001004350000003201000039000000040010043f000002f00100004100000aba000104300000000401000039000000590200008a000500000002001d0000000007000019000000000600001900000058031000390000000802000029000d00000003001d000000000223004b000000bb0000213d000000070200002900000000022100190000000001000414000002af032001970000000504000029000000000442004b0000008a0000213d00000058022000390000000004000031000000000524004b0000008a0000413d000c00000007001d000e00000006001d0000000203300367000002cf0510009c000001960000813d0000000002240049000002af0220019700000000022303df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000004970000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c0000000e09000029000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000c0a000029000004300000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000004280000413d000000000400004b000004320000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000004410000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000004390000413d0000001f03300190000004500000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000b010000290000000001010433000000000191004b0000000a03000029000003e30000a13d0000000501900210000000000131001900000000020204330000000000210435000000400100043d00000040031000390000000000230435000000400200003900000000022104360000000000a20435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000e0600002900000001022001900000000602000029000000bb0000613d000000000701043b0000000106600039000000000126004b0000000d020000290000000001020019000003ee0000413d000003850000013d000000400100043d0000006402100039000002d00300004100000000003204350000004402100039000002d103000041000000000032043500000024021000390000003c030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba000104300000001f0430018f0000000502300272000004a20000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000049b0000413d000000000504004b000004b00000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400200043d0000001f0430018f0000000503300272000004bf0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000004b70000413d000000000504004b000004ce0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000050100008a000900000001001d0000000d02000029000000000112004b0000008a0000213d0000000d0100002900000004031000390000000801000029000000000113004b000000bb0000213d0000000a010000290000000001010433000500000001001d00000007010000290000000d0200002900000000011200190000000201100367000000000101043b000002b90210009c0000000007000019000005450000813d0000000201000039000300000001001d000000000101041a000000000117004b000005f10000c13d0000000901000029000000000113004b0000008a0000213d00000004023000390000000801000029000e00000002001d000000000112004b000000bb0000213d000000070100002900000000011300190000000201100367000000000101043b000002b90210009c000b00000000001d000006240000813d0000000301000039000d00000001001d000000000101041a0000000b02000029000000000112004b000006cf0000c13d00000008010000290000000e02000029000000000112004b000003e30000813d00000007010000290000000e0200002900000000011200190000000203000367000000000213034f000000000202043b000002e702200197000002c10220009c0000072e0000c13d00000009020000290000000e04000029000000000224004b0000008a0000213d0000000e0200002900000004022000390000000804000029000000000442004b000000bb0000213d0000000101100039000000000113034f000000000101043b0000000804000029000000000442004b000003e30000813d000000e80110027000000007040000290000000002420019000000000423034f0000000e020000290000000502200039000000000521001a000c00000005001d000000000404043b0000008a0000413d00000008050000290000000c06000029000000000556004b000000bb0000213d0000000c05000029000002ea0550009c000007a60000413d000000400100043d0000004402100039000002ee030000410000000000320435000002c902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000e001100270000a00000001001d0000000007000019000e00000000001d0000000901000029000000000113004b0000008a0000213d00000004013000390000000802000029000000000221004b000000bb0000213d000000070200002900000000022300190000000202200367000000000202043b000000e002200270000000000612001a0000008a0000413d0000000803000029000000000336004b000000bb0000213d000000070300002900000000033100190000000001000414000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d000d00000007001d000b00000006001d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000006090000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000000d09000029000005940000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b0000058c0000413d000000000400004b000005960000613d0000000104000031000000000443004b000000bb0000213d00000003040003670000000505300272000005a50000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b0000059d0000413d0000001f03300190000005b40000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000005df0000c13d0000000002020433000000400100043d00000040031000390000000000230435000000200210003900000000009204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000000b03000029000000bb0000613d000000000701043b0000000e0200002900000001022000390000000a01000029000e00000002001d000000000112004b000005490000413d000004ed0000013d000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000008402100039000002d60300004100000000003204350000006402100039000002d70300004100000000003204350000004402100039000002d8030000410000000000320435000000240210003900000044030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba000104300000001f0430018f0000000502300272000006140000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000060d0000413d000000000504004b000006220000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000e001100270000600000001001d000b00000000001d000a00000000001d00000009010000290000000e02000029000000000112004b0000008a0000213d0000000e0100002900000004011000390000000802000029000000000221004b000000bb0000213d00000007020000290000000e0300002900000000022300190000000202200367000000000202043b000000e003200270000d00000003001d000000000313001a000e00000003001d0000008a0000413d00000008030000290000000e04000029000000000334004b000000bb0000213d000002da03200198000007430000c13d000002dc0320009c000007550000813d000002dd02200198000007670000613d0000000702000029000000000321001900000000010004140000000d02000029000000000232001a000002af043001970000008a0000413d0000000003000031000000000523004b0000008a0000413d0000000204400367000002af0510009c000001960000213d0000000002230049000002af0220019700000000022403df000000c001100210000002b801100197000002b9011001c700000000011203af00000002020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af0330019700030000000103550000000102200190000007790000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c000003660000213d0000000104400190000003660000c13d000000400020043f00000000023104360000001f0430003900000005044002720000067d0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000006750000413d000000000400004b0000067f0000613d0000000104000031000000000443004b000000bb0000213d000000030400036700000005053002720000068e0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006860000413d0000001f033001900000069d0000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000001010433000000200110008c000007940000c13d0000000001020433000002df011001970000000d02000029000000db02200210000002e002200197000000000112019f000002c1021001c7000000400100043d0000004003100039000000000023043500000020021000390000000b0300002900000000003204350000000c030000290000000000310435000002bb0310009c000003660000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000000bb0000613d000000000101043b000b00000001001d0000000a0200002900000001022000390000000601000029000a00000002001d000000000112004b000006280000413d000005010000013d000000400100043d0000008402100039000002e40300004100000000003204350000006402100039000002e50300004100000000003204350000004402100039000002e603000041000000000032043500000024021000390000005e030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d9011001c700000aba00010430000000200200003900000000022104360000000d0500002900000000005204350000001f0350018f00000040021000390000000c0400002900000002044003670000000505500272000006fa0000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000006f20000413d000000000603004b000007090000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f00000000003504350000000d03000029000000000232001900000000000204350000005f02300039000000200300008a000000000232016f000002af03000041000002af0410009c00000000010380190000004001100210000002af0420009c00000000020380190000006002200210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c70000800d020000390000000303000039000002c60400004100000001050000290000000b060000290ab80aa90000040f0000000101200190000000bb0000613d000000400100043d0000000b020000290000000000210435000002af02000041000002af0310009c00000000010280190000004001100210000002c7011001c700000ab90001042e000000400100043d0000006402100039000002e80300004100000000003204350000004402100039000002e9030000410000000000320435000000240210003900000027030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba00010430000000400100043d0000004402100039000002db030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e3030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000400100043d0000004402100039000002e2030000410000000000320435000000240210003900000003030000290000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f0000000502300272000007840000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000077d0000413d000000000504004b000007920000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000000400100043d0000004402100039000002de030000410000000000320435000000240210003900000019030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000000c0500002900000004055000390000000806000029000000000665004b000000bb0000213d00000007060000290000000c070000290000000006670019000000000363034f000000000703043b000000e00670027000000110836000c9000002b90770009c000007b70000413d00000000876300d9000001100770008c0000008a0000c13d00000000085300190000000807000029000b00000008001d000000000778004b000000bb0000213d000000f804400270000000400900043d00000044079000390000000408000029000000000087043500000024079000390000000000470435000002eb0400004100000000004904350000008404900039000000000034043500000004049000390000000000640435000000070600002900000000076500190000001f0630018f000e00000009001d000000a40590003900000002087003670000000509300272000007da0000613d0000000007000019000000050a700210000000000ba50019000000000aa8034f000000000a0a043b0000000000ab04350000000107700039000000000a97004b000007d20000413d00000007070000290000000007720019000000000206004b000007eb0000613d0000000502900210000000000828034f00000000022500190000000306600210000000000902043300000000096901cf000000000969022f000000000808043b0000010006600089000000000868022f00000000066801cf000000000696019f0000000000620435000000000235001900000000000204350000001f02300039000002ec02200197000000000225001900000000034200490000000e04000029000000640440003900000000003404350000001f0310018f000000000212043600000002047003670000000505100272000008020000613d000000000600001900000005076002100000000008720019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b000007fa0000413d000000000603004b000008110000613d0000000505500210000000000454034f00000000055200190000000303300210000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000000000312001900000000000304350000001f01100039000002ed011001970000000e0400002900000000014100490000000001210019000002af02000041000002af0340009c000000000302001900000000030440190000004003300210000002af0410009c00000000010280190000006001100210000000000131019f0000000003000414000002af0430009c0000000002034019000000c002200210000000000112019f0000800e020000390ab80aa90000040f00000000030100190000006003300270000002af03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000083b0000613d000000000700001900000005087002100000000e090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000008320000413d000000000705004b0000084b0000613d0000000506600210000000000761034f0000000e0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000008770000613d0000001f01400039000000600210018f0000000e010000290000000001120019000000000221004b00000000020000190000000102004039000002b70410009c000003660000213d0000000102200190000003660000c13d000000400010043f000000200130008c000000bb0000413d00000008010000290000000b02000029000000000112004b000000000100001900000001010060390000000e020000290000000002020433000e00000002001d0ab809ce0000040f0000000501000029000000000010041d00000007010000290000000c020000290ab809e60000040f0000000102000039000000000012041d00000003010000290000000e03000029000000000031041d000000000000041b000000000002041b000000000001041b0000000d01000029000000000001041b000000000100001900000ab90001042e000000400200043d0000001f0430018f0000000503300272000008840000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000087c0000413d000000000504004b000008930000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000002af010000410000000103000031000002af0430009c0000000003018019000002af0420009c000000000102401900000040011002100000006002300210000000000112019f00000aba00010430000000400100043d000002f70210009c000008a30000813d000000c002100039000000400020043f000000000001042d000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba0001043000070000000000020000000082010434000000f80320021000000040071000390000006006100039000000a005100039000200000001001d0000008002100039000600000002001d0000000004020433000700000005001d0000000005050433000500000006001d0000000006060433000400000007001d0000000007070433000300000008001d0000000008080433000000400100043d00000020021000390000000000320435000002c103000041000000000808004b000000000300601900000021081000390000000000380435000000f00370021000000022071000390000000000370435000000600360021000000024061000390000000000360435000000580310003900000000005304350000003803100039000000000043043500000058030000390000000000310435000002f80310009c000009400000813d0000008003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000201043b000000400100043d0000004003100039000000000400041a00000000002304350000002002100039000000000042043500000040030000390000000000310435000002bb0310009c000009400000213d0000006003100039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001010433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f00000001022001900000093e0000613d000000000101043b000000000010041b0000000103000039000000000203041a000000010100008a000000000112004b000009460000613d000100000002001d0000000101200039000000000013041b00000002010000290000000001010433000000ff0110018f000000400200043d000000000112043600000003040000290000000004040433000000000404004b0000000004000019000000010400c0390000000000410435000000040100002900000000010104330000ffff0110018f0000004004200039000000000014043500000005010000290000000001010433000002c00110019700000060042000390000000000140435000000060100002900000000010104330000008004200039000000000014043500000007010000290000000001010433000000a0042000390000000000140435000002af01000041000002af0420009c00000000020180190000000004000414000002af0540009c00000000010440190000004002200210000000c001100210000000000121019f000002c3011001c70000800d02000039000002c4040000410ab80aa90000040f00000001012001900000093e0000613d0000000101000029000000000001042d000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba0001043000020000000000020000000302000039000100000002001d000000000302041a000000400500043d0000004002500039000200000001001d00000000001204350000002002500039000000000032043500000040030000390000000000350435000002f90350009c000009a50000813d0000006003500039000000400030043f000002af03000041000002af0420009c000000000203801900000040022002100000000001050433000002af0410009c00000000010380190000006001100210000000000121019f0000000002000414000002af0420009c0000000002038019000000c002200210000000000112019f000002bc011001c700008010020000390ab80aae0000040f0000000102200190000009a30000613d000000000101043b0000000102000029000000000012041b0000000001000413000002af031001970000000206000029000000e0016002700000ffff0210018f000000050120021000000004041001bf00000000514300a900000000544100d9000000000343004b0000099d0000c13d0000000102200270000000010320003900000007423000c9000000075420011a000000000343004b0000099d0000c13d0000000001210019000002fa0210009c000009ab0000813d00000028011000390000000002100420000000400100043d000000000202004b000009bd0000613d0000000000610435000002af020000410000000003000414000002af0430009c0000000003028019000002af0410009c00000000010280190000004001100210000000c002300210000000000112019f000002fb011001c70000800d020000390000000103000039000002fc040000410ab80aa90000040f0000000101200190000009a30000613d000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba00010430000000000101004b000009d10000613d000000000001042d000000400100043d0000006402100039000002fd0300004100000000003204350000004402100039000002fe03000041000000000032043500000024021000390000002a030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002d2011001c700000aba0001043000000000030004140000000004120019000000000224004b00000000050000190000000105004039000002af02100197000000010150019000000a450000c13d0000000001000031000000000541004b00000a450000413d0000000202200367000002cf0530009c00000a4b0000813d0000000001410049000002af0110019700000000011203df000000c002300210000002b802200197000002b9022001c700000000012103af00008010020000390ab80ab30000040f00000000030100190000006003300270000102af0030019d000002af033001970003000000010355000000010220019000000a5d0000613d0000003f01300039000002ba02100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000002b70520009c00000a780000213d000000010440019000000a780000c13d000000400020043f00000000023104360000001f04300039000000050440027200000a1f0000613d00000000050000310000000205500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b00000a170000413d000000000400004b00000a210000613d0000000104000031000000000443004b00000a7e0000213d00000003050003670000001f0430018f000000050330027200000a310000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b00000a290000413d000000000604004b00000a400000613d0000000503300210000000000535034f00000000033200190000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000001010433000000200110008c00000a800000c13d0000000001020433000000000001042d000002ef0100004100000000001004350000001101000039000000040010043f000002f00100004100000aba00010430000000400100043d0000004402100039000002e1030000410000000000320435000000240210003900000008030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba000104300000001f0430018f000000050230027200000a680000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b00000a610000413d000000000504004b00000a760000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600130021000000aba00010430000002ef0100004100000000001004350000004101000039000000040010043f000002f00100004100000aba00010430000000000100001900000aba00010430000000400100043d0000004402100039000002d503000041000000000032043500000024021000390000001f030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000078010000390000000001100420000000000101004b00000a970000613d000000000001042d000000400100043d0000004402100039000002c8030000410000000000320435000000240210003900000014030000390000000000320435000002c9020000410000000000210435000000040210003900000020030000390000000000320435000002af02000041000002af0310009c00000000010280190000004001100210000002ca011001c700000aba0001043000000aac002104210000000102000039000000000001042d0000000002000019000000000001042d00000ab1002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab6002104230000000102000039000000000001042d0000000002000019000000000001042d00000ab80000043200000ab90001042e00000aba00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000628b636d00000000000000000000000000000000000000000000000000000000628b636e0000000000000000000000000000000000000000000000000000000062f84b240000000000000000000000000000000000000000000000000000000039b34c6e0000000000000000000000000000000000000000000000000000000056079ac88000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f02000000000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f02000000000000000000000000000000000000c000000000000000000000000027fe8c0b49f49507b9d4fe5968c9f49edfe5c9df277d433a07a0717ede97638d00000000000000000000000000000000ffffffffffffffffffffffffffffffff3a36e47291f4201faf137fab081d92295bce2d53be2c6ca68ba82c7faa9ce24100000000000000000000000000000000000000200000000000000000000000004661696c656420746f206368617267652067617300000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000000080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffeffdf000000000000000000000000000000000000000000000000000000000001002000000000000000000000000000000000000000000000000000000001000000006e6f7420657175616c20746f20636861696e65644c6f677348617368000000007265636f6e7374727563746564436861696e65644c6f677348617368206973200000000000000000000000000000000000000084000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff72abee45b59e344af8a6e520241c4744aff26ed411f4c4b00f8af09adada43ba6b656363616b3235362072657475726e656420696e76616c69642064617461004861736800000000000000000000000000000000000000000000000000000000206973206e6f7420657175616c20746f20636861696e65644d657373616765737265636f6e7374727563746564436861696e65644d657373616765734861736800000000000000000000000000000000000000a40000000000000000000000000000001f00000000000000000000000000000000000000000000000000000000706f000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000007368612072657475726e656420696e76616c696420646174610000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffffff000000000000000000000000000000000000000000000000000000004f766572666c6f770000000000000000000000000000000000000000000000007072000000000000000000000000000000000000000000000000000000000000707000000000000000000000000000000000000000000000000000000000000061696e65644c3142797465636f64657352657665616c44617461486173680000657665616c4461746148617368206973206e6f7420657175616c20746f2063687265636f6e7374727563746564436861696e65644c3142797465636f64657352ff0000000000000000000000000000000000000000000000000000000000000069736d61746368000000000000000000000000000000000000000000000000007374617465206469666620636f6d7072657373696f6e2076657273696f6e206d000000000000000000000000000000000000000000000000000000000007ef416006d8b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffffe00000000000000000000000000000000000000000000000000000000001ffffe04c31204d657373656e676572207075626461746120697320746f6f206c6f6e674e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000546f6f206d616e79204c322d3e4c31206c6f677300000000000000000000000000000000000000000000000000000000000000000000000000000000000100006f2062652073797374656d20636f6e747261637400000000000000000000000054686973206d6574686f642072657175697265207468652063616c6c65722074496e617070726f7072696174652063616c6c65720000000000000000000000000000000000000000000000000000000000000064000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000000000000000000000000ffffffd80200000000000000000000000000000000000020000000000000000000000000480d3c9f727b5e5c1203d4c61fb185d37f08e6b2dc5e9bbf98591b1a7addf57c64617461206172726179000000000000000000000000000000000000000000004578747261206461746120696e2074686520746f74616c4c32546f4c315075620000000000000000000000000000000000000000000000000000000000000000918be26e3402038993f44a7d3e3c4373187a68986a393c0b39192bb13d9ba4c6", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/L2EthToken.json b/src/deps/contracts/L2EthToken.json index dbec0297..49a982e3 100644 --- a/src/deps/contracts/L2EthToken.json +++ b/src/deps/contracts/L2EthToken.json @@ -247,8 +247,8 @@ "type": "function" } ], - "bytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000d66663aa2f1a51969904494bc8c42be4574698831eca2f0bbb8a72fbcf00d2d7", - "deployedBytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc00000000000000000000000000000000000000000000000000000000000000000d66663aa2f1a51969904494bc8c42be4574698831eca2f0bbb8a72fbcf00d2d7", + "bytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000000000000000000000000000007b3ba959bf7eac2739d6ef137ed2b810585c27a9dbd1782f8efe2a761831b7e4", + "deployedBytecode": "0x00030000000000020005000000000002000200000001035500000060011002700000010f0010019d000100000000001f0000008001000039000000400010043f00000001012001900000003c0000c13d0000000002000031000000040120008c000002990000413d0000000201000367000000000301043b000000e003300270000001110430009c000000440000a13d000001120430009c000000650000a13d000001130430009c000000e50000613d000001140130009c000002880000613d000001150130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000200310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000004010000390000000201100367000000000101043b0000011e011001970000000000100435000000200000043f0000000001000019043503fb0000040f000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d0000002001000039000001000010044300000120000004430000011001000041000004360001042e000001180130009c000000a20000213d0000011b0130009c000002080000613d0000011c0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d0000000101000039000000000101041a000000400200043d00000000001204350000010f010000410000010f0320009c000000000102401900000040011002100000011f011001c7000004360001042e000001160430009c000002300000613d000001170130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000600310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002402100370000000000202043b0000011e052001970000011e0220009c000002990000213d00000000020004110000004401100370000000000301043b000080060120008c0000033b0000613d000000090100008a000000000112016f000080010110008c0000033b0000613d000000400100043d00000064021000390000012703000041000000000032043500000044021000390000012803000041000000000032043500000024021000390000003e030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012a011001c70000043700010430000001190130009c0000026e0000613d0000011a0130009c000002990000c13d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000400310008c000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d00000002010003670000000402100370000000000402043b0000011e0240009c000002990000213d0000002401100370000000000501043b0000000001000411000080010110008c000002b50000c13d0000000101000039000000000301041a0000000002530019000000000332004b000000000300001900000001030040390000000103300190000000df0000c13d000400000005001d000000000021041b0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005050000290000000102200190000002990000613d000000000101043b000000000201041a0000000403000029000000000232001a000000df0000413d000003880000013d000001310100004100000000001004350000001101000039000000040010043f00000132010000410000043700010430000000040320008a0000011d04000041000000400530008c000000000500001900000000050440190000011d03300197000000000603004b000000000400a0190000011d0330009c00000000030500190000000003046019000000000303004b000002990000c13d0000000403100370000000000803043b0000011e0380009c000002990000213d0000002403100370000000000303043b000001210430009c000002990000213d00000023043000390000011d05000041000000000624004b000000000600001900000000060580190000011d022001970000011d04400197000000000724004b0000000005008019000000000224013f0000011d0220009c00000000020600190000000002056019000000000202004b000002990000c13d0000000402300039000000000121034f000000000101043b000001210210009c000002680000213d000000bf02100039000000200500008a000000000252016f000001210420009c000002680000213d000000400020043f000000800010043f000000240330003900000000023100190000000004000031000000000242004b000002990000213d000400000005001d0000001f0210018f00000002033003670000000504100272000001280000613d00000000050000190000000506500210000000000763034f000000000707043b000000a00660003900000000007604350000000105500039000000000645004b000001200000413d000500000008001d000000000502004b000001380000613d0000000504400210000000000343034f0000000302200210000000a004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000000a00110003900000000000104350000000001000416000300000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000010220019000000005040000290000000407000029000002990000613d000000000101043b000000000201041a00000003090000290000000002920049000000000021041b0000000101000039000000000201041a0000000002920049000000000021041b0000012302000041000000400100043d000000200310003900000000002304350000006002400210000000240310003900000000002304350000000008000411000000600280021000000058031000390000000000230435000000380210003900000000009204350000006c03100039000000800200043d000000000402004b0000016d0000613d00000000040000190000000005340019000000a006400039000000000606043300000000006504350000002004400039000000000524004b000001660000413d000000000332001900000000000304350000004c0320003900000000003104350000008b02200039000000000272016f000000000a12001900000000022a004b000000000200001900000001020040390000012103a0009c000002680000213d0000000102200190000002680000c13d000100000008001d0000004000a0043f000001240200004100000000002a04350000000402a000390000002003000039000000000032043500000000020104330000002403a0003900000000002304350000004403a00039000000000402004b000001900000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000001890000413d000000000132001900000000000104350000001f01200039000000000171016f0000010f020000410000010f03a0009c000000000302001900000000030a4019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f000080080200003900020000000a001d0435042b0000040f000000020a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000001b90000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001b10000413d000000000705004b000001c80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003d50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005040000290000000305000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000020021000390000004003000039000000000032043500000000005104350000004003100039000000800200043d000000000023043500000060031000390000011e06400197000000000402004b000001ed0000613d00000000040000190000000005340019000000a007400039000000000707043300000000007504350000002004400039000000000524004b000001e60000413d000000000332001900000000000304350000007f022000390000000403000029000000000232016f0000010f030000410000010f0410009c000000000103801900000040011002100000010f0420009c00000000020380190000006002200210000000000112019f00000000020004140000010f0420009c0000000002038019000000c002200210000000000112019f00000125011001c70000800d020000390000000303000039000001260400004100000001050000290435042b0000040f0000000101200190000003d30000c13d000002990000013d0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000c001000039000000400010043f0000000501000039000000800010043f0000013501000041000000a00010043f0000002001000039000000400200043d000500000002001d000000000212043600000080010000390435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000040220008a0000011d03000041000000200420008c000000000400001900000000040340190000011d02200197000000000502004b000000000300a0190000011d0220009c00000000020400190000000002036019000000000202004b000002990000c13d0000000401100370000000000401043b0000011e0140009c000002990000213d0000000001000416000400000001001d00000000010004100000000000100435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d043504300000040f00000005040000290000000102200190000002990000613d000000000101043b000000000201041a00000004050000290000000002520049000000000021041b0000000101000039000000000201041a0000000002520049000000000021041b0000012302000041000000400100043d0000002003100039000000000023043500000060024002100000002403100039000000000023043500000038021000390000000000520435000000380200003900000000002104350000012f0210009c000002c70000413d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b000002990000c13d000000400100043d000000120200003900000000002104350000010f020000410000010f0310009c000000000102801900000040011002100000011f011001c7000004360001042e0000000001000416000000000101004b000002990000c13d000000040100008a00000000011000310000011d02000041000000000301004b000000000300001900000000030240190000011d01100197000000000401004b000000000200a0190000011d0110009c00000000010300190000000001026019000000000101004b0000029b0000613d00000000010000190000043700010430000000400100043d000400000001001d043504200000040f00000004030000290000002001300039000001200200004100000000002104350000000301000039000000000013043500000000010300190000002002000039000000400300043d000500000003001d00000000022304360435040d0000040f000000050400002900000000014100490000010f020000410000010f0310009c00000000010280190000010f0340009c000000000204401900000040022002100000006001100210000000000121019f000004360001042e000000400100043d00000044021000390000013303000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c700000437000104300000006007100039000000400070043f00000124020000410000000000270435000000640210003900000020030000390000000000320435000000840310003900000000020104330000000000230435000000a403100039000000000402004b000002dc0000613d000000000400001900000000053400190000002004400039000000000614001900000000060604330000000000650435000000000524004b000002d50000413d000000000132001900000000000104350000001f01200039000000200200008a000000000121016f0000010f020000410000010f0370009c00000000030200190000000003074019000000400330021000000044011000390000010f0410009c00000000010280190000006001100210000000000131019f00000000030004140000010f0430009c0000000002034019000000c002200210000000000112019f0000800802000039000300000007001d0435042b0000040f000000030a000029000000000301001900000060033002700000010f03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000003060000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000002fe0000413d000000000705004b000003150000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000003620000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000001210410009c00000005050000290000000404000029000002680000213d0000000102200190000002680000c13d000000400010043f000000200230008c000002990000413d00000000004104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000011e065001970000800d020000390000000303000039000001300400004100000000050004110435042b0000040f0000000101200190000003d30000c13d000002990000013d000400000003001d0000000000400435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039000500000004001d000300000005001d043504300000040f00000005030000290000000102200190000002990000613d000000000101043b000000000201041a0000000401000029000000000112004b0000039c0000813d000000400100043d00000044021000390000012d03000041000000000032043500000024021000390000001f030000390000000000320435000001290200004100000000002104350000000402100039000000200300003900000000003204350000010f020000410000010f0310009c000000000102801900000040011002100000012e011001c70000043700010430000000400200043d0000001f0430018f00000005033002720000036f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003670000413d000000000504004b0000037e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f0000043700010430000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d02000039000000020300003900000134040000410435042b0000040f0000000101200190000002990000613d000003d30000013d000200000002001d0000000000300435000000200000043f0000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f00000003030000290000000102200190000002990000613d000000040200002900000002040000290000000002240049000000000101043b000000000021041b00000000003004350000010f0100004100000000020004140000010f0320009c0000000001024019000000c00110021000000122011001c70000801002000039043504300000040f000000030600002900000005050000290000000102200190000002990000613d000000000101043b000000000201041a00000004030000290000000002320019000000000021041b000000400100043d00000000003104350000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f0000012b011001c70000800d0200003900000003030000390000012c040000410435042b0000040f0000000101200190000002990000613d0000000001000019000004360001042e000000400200043d0000001f0430018f0000000503300272000003e20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000003da0000413d000000000504004b000003f10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000010f0100004100000001030000310000010f0430009c00000000030180190000010f0420009c000000000102401900000040011002100000006002300210000000000112019f00000437000104300000010f0200004100000000030004140000010f0430009c00000000030280190000010f0410009c00000000010280190000004001100210000000c002300210000000000112019f00000122011001c70000801002000039043504300000040f00000001022001900000040b0000613d000000000101043b000000000001042d0000000001000019000004370001043000000000030104330000000002320436000000000403004b000004190000613d000000000400001900000000052400190000002004400039000000000614001900000000060604330000000000650435000000000534004b000004120000413d000000000123001900000000000104350000001f01300039000000200300008a000000000131016f0000000001120019000000000001042d000001360210009c000004250000813d0000004001100039000000400010043f000000000001042d000001310100004100000000001004350000004101000039000000040010043f000001320100004100000437000104300000042e002104210000000102000039000000000001042d0000000002000019000000000001042d00000433002104230000000102000039000000000001042d0000000002000019000000000001042d0000043500000432000004360001042e0000043700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000051cff8d80000000000000000000000000000000000000000000000000000000084bc3eaf0000000000000000000000000000000000000000000000000000000084bc3eb00000000000000000000000000000000000000000000000000000000095d89b41000000000000000000000000000000000000000000000000000000009cc7f7080000000000000000000000000000000000000000000000000000000051cff8d900000000000000000000000000000000000000000000000000000000579952fc00000000000000000000000000000000000000000000000000000000313ce56600000000000000000000000000000000000000000000000000000000313ce5670000000000000000000000000000000000000000000000000000000040c10f190000000000000000000000000000000000000000000000000000000006fdde030000000000000000000000000000000000000000000000000000000018160ddd8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000200000000000000000000000004554480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff02000000000000000000000000000000000000400000000000000000000000006c0960f90000000000000000000000000000000000000000000000000000000062f84b24000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c405fe8958410bbaf0c73b7a0c3e20859e86ca168a4c9b0def9c54d2555a306b616c206163636573732063616e2063616c6c2074686973206d6574686f6400004f6e6c792073797374656d20636f6e747261637473207769746820737065636908c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5472616e7366657220616d6f756e7420657863656564732062616c616e6365000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa02717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63984e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f61646572000f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968854574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffc000000000000000000000000000000000000000000000000000000000000000007b3ba959bf7eac2739d6ef137ed2b810585c27a9dbd1782f8efe2a761831b7e4", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/MsgValueSimulator.json b/src/deps/contracts/MsgValueSimulator.json index c0f0e773..b669931c 100644 --- a/src/deps/contracts/MsgValueSimulator.json +++ b/src/deps/contracts/MsgValueSimulator.json @@ -8,8 +8,8 @@ "type": "fallback" } ], - "bytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c66000002e4ced3a84efd977ea0cd094834155e696aecd7aa7fbacd8924e90521dff9c0", - "deployedBytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c66000002e4ced3a84efd977ea0cd094834155e696aecd7aa7fbacd8924e90521dff9c0", + "bytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c660000d44067f635588b53489f404b01f1d63a7a4aad6d0e7bbd1ac391aa57401c3dc1", + "deployedBytecode": "0x000800000000000200000000060100190000006006600270000000590760019700070000007103550006000000010355000300000003001f000400000004001f000500000005001f000000590060019d000200000002001f000100000000001f0000008001000039000000400010043f000000000100041600000001022001900000002e0000c13d000000000101004b000000350000c13d00000002010000390000000201100188000000370000c13d00000000010004110000005b0110009c000000370000413d000000400100043d00000064021000390000005c03000041000000000032043500000044021000390000005d0300004100000000003204350000002402100039000000240300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000005f011001c70000016000010430000000000101004b000000350000c13d0000002001000039000001000010044300000120000004430000005a010000410000015f0001042e000000000100001900000160000104300000000001000031015e00440000040f00000020021000390000005903000041000000590420009c00000000020380190000000001010433000000590410009c000000000103801900000060011002100000004002200210000000000112019f0000015f0001042e0005000000000002000000000901001900000005040000310000000305000031000000600100004100000004021001870000000001000410000000000112004b000001200000613d000000000105004b0000000006000411000000ae0000613d000200000004001d000000400100043d0000006403100039000100000005001d00000000005304350000004403100039000400000002001d0000000000230435000000200210003900000061030000410000000000320435000300000006001d00000060036001970000002404100039000000000034043500000064030000390000000000310435000000620310009c000001060000813d000000a003100039000000400030043f0000005903000041000000590420009c000000000203801900000040022002100000000001010433000000590410009c00000000010380190000006001100210000000000121019f0000000002000414000000590420009c0000000002038019000000c002200210000000000121019f0000800a02000039000500000009001d015e01530000040f000000050900002900070000000103550000006001100270000100590010019d0000005901100198000000a60000613d0000003f031000390000006304300197000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000000640640009c000001060000213d0000000105500190000001060000c13d000000400040043f0000000001130436000000070300036700000001050000310000001f0450018f0000000505500272000000970000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b0000008f0000413d000000000604004b000000a60000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000001012001900000011e0000613d0000000105000029000000650150009c0000000402000029000000030600002900000002040000290000010c0000813d000000000005041700000000050004140000000001000031000000000391004b000001320000413d000000590350009c0000010c0000213d0000000103400190000000660300004100000067040000410000000003046019000000c0045002100000006804400197000000000334019f0000000001910049000000590110019700000006011003f700000000013103af000000600d600197015e01580000040f00000000030100190000006003300270000100590030019d000000590330019700070000000103550000000102200190000001380000613d0000003f013000390000006302100197000000400100043d0000000002210019000000000412004b00000000040000190000000104004039000000640520009c000001060000213d0000000104400190000001060000c13d000000400020043f00000000023104360000001f043000390000000504400272000000e40000613d00000000050000310000000605500367000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000746004b000000dc0000413d000000000400004b000000e60000613d0000000104000031000000000443004b0000011e0000213d00000007050003670000001f0430018f0000000503300272000000f60000613d000000000600001900000005076002100000000008720019000000000775034f000000000707043b00000000007804350000000106600039000000000736004b000000ee0000413d000000000604004b000001050000613d0000000503300210000000000535034f00000000023200190000000303400210000000000402043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f0000000000320435000000000001042d000000690100004100000000001004350000004101000039000000040010043f0000006a010000410000016000010430000000400100043d00000044021000390000006b0300004100000000003204350000002402100039000000080300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c7000001600001043000000000010000190000016000010430000000400100043d00000044021000390000006d03000041000000000032043500000024021000390000001e0300003900000000003204350000005e0200004100000000002104350000000402100039000000200300003900000000003204350000005902000041000000590310009c000000000102801900000040011002100000006c011001c70000016000010430000000690100004100000000001004350000001101000039000000040010043f0000006a0100004100000160000104300000001f0430018f0000000502300272000001430000613d00000000050000190000000506500210000000000761034f000000000707043b00000000007604350000000105500039000000000625004b0000013c0000413d000000000504004b000001510000613d00000003044002100000000502200210000000000502043300000000054501cf000000000545022f000000000121034f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000006001300210000001600001043000000156002104210000000102000039000000000001042d0000000002000019000000000001042d000000000f0d00190000015c002104290000000102000039000000000001042d0000000002000019000000000001042d0000015e000004320000015f0001042e000001600001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000000010000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff579952fc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff6000000000000000000000000000000000000000000000000000000001ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000004f766572666c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d736756616c756553696d756c61746f722063616c6c7320697473656c660000d44067f635588b53489f404b01f1d63a7a4aad6d0e7bbd1ac391aa57401c3dc1", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/NonceHolder.json b/src/deps/contracts/NonceHolder.json index 36bfe503..cf484dff 100644 --- a/src/deps/contracts/NonceHolder.json +++ b/src/deps/contracts/NonceHolder.json @@ -221,8 +221,8 @@ "type": "function" } ], - "bytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001030010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002100000413d0000000301000367000000000101043b000000e001100270000001050210009c000000460000213d0000010c0210009c000000720000a13d0000010d0210009c000001830000613d0000010e0210009c000001b40000613d0000010f0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d0000002001000039000001000010044300000120000004430000010401000041000004060001042e000001060210009c000000a90000a13d000001070210009c000001db0000613d000001080210009c000001ff0000613d000001090110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a0000008001100270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000001100210009c000000cc0000613d000001110110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000301043b000001130130009c000002100000213d000000000100041100000002020000390000000202200188000000920000c13d0000ffff0210008c000002180000213d000080060110008c0000028b0000c13d0000000000300435000000200000043f0000000001000019000600000003001d040503800000040f000000000101041a000500000001001d0000000601000029040503920000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000010a0210009c0000013a0000613d0000010b0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d040503a20000040f000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e80000c13d000001210130009c000002180000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000113023001970000000401400039000100000002001d000000000021043500000103010000410000000002000414000001030320009c0000000002018019000001030340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040504000000040f000000060a000029000000000301001900000060033002700000010303300197000000400430008c000000400400003900000000040340190000001f0540018f0000000506400272000001130000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002650000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c000001340000213d0000000102200190000001340000c13d000000400010043f000000400230008c000002100000413d000001250210009c000002cf0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000600310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003010003670000000402100370000000000402043b000001130240009c000002100000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002100000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039000500000004001d040504000000040f00000005030000290000000102200190000002100000613d000000000101043b000000000101041a00000116011001970000000402000029000000000121004b000002ab0000a13d0000000601000029000000000101004b000002cd0000c13d000000400200043d000600000002001d000001180100004100000000001204350000000401200039040503f10000040f000000060400002900000000014100490000010302000041000001030310009c0000000001028019000001030340009c000000000204401900000040022002100000006001100210000000000121019f00000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000201043b000000020100003900000002011001880000019d0000c13d00000000010004110000ffff0110008c000002180000213d0000011b0120009c0000024d0000413d000000400100043d00000064021000390000011c03000041000000000032043500000044021000390000011d030000410000000000320435000000240210003900000030030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c700000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000100041100000000001004350000000101000039000000200010043f0000000001000019040503800000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003020003670000000401200370000000000101043b000001130310009c000002100000213d0000002402200370000000000202043b040503b50000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002120000613d000000000100001900000407000104300000000002000411000000020100003900000002011001880000022d0000c13d0000ffff0120008c0000022d0000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c70000040700010430000600000002001d0000000000200435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011603100197000000000223004b000002990000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d0000000001000019040503800000040f0000000602000029000000000021041b0000000001000019000004060001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d040503800000040f000000000101041a000400000001001d0000000501000029040503920000040f000000060200002900000004030000290000000002230019000000000021041b0000011601300197000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000000400200043d0000001f0430018f0000000503300272000002720000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000026a0000413d000000000504004b000002810000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000103010000410000000103000031000001030430009c0000000003018019000001030420009c000000000102401900000040011002100000006002300210000000000112019f0000040700010430000000400100043d00000118020000410000000000210435000000040210003900000020030000390000000000320435000000240210003900000000000204350000010302000041000001030310009c000000000102801900000040011002100000011f011001c70000040700010430000000400100043d00000044021000390000011703000041000000000032043500000024021000390000000f030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000000003004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000004020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000016f0000c13d0000000601000029000000000101004b000002ef0000c13d0000000001000019000004060001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002100000213d000000000221043600000005010000290000000001010433000000010310008c000002100000213d00000000001204350000000402000029000000000202004b000003010000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000400100043d00000044021000390000011a03000041000000000032043500000024021000390000001d030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000000101004b0000031b0000c13d0000000301000029000000000101004b0000031b0000613d00000001010000290000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011601100197000600000002001d000000000121004b0000034f0000a13d000000020100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000003020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040503fb0000040f0000000101200190000002100000613d000002cd0000013d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000006020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000031b0000c13d000000400100043d00000044021000390000012603000041000000000032043500000118020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000115011001c70000801002000039040504000000040f0000000102200190000003900000613d000000000101043b000000000001042d000000000100001900000407000104300000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003a00000613d000000000101043b000000000001042d0000000001000019000004070001043000000113011001970000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003b30000613d000000000101043b000000000101041a0000011601100197000000000001042d000000000100001900000407000104300002000000000002000200000002001d0000011301100197000100000001001d0000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d0000000102000039000000000101043b000000000101041a00000116011001970000000203000029000000000131004b000003ed0000213d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b00000002020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004070001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fe002104210000000102000039000000000001042d0000000002000019000000000001042d00000403002104230000000102000039000000000001042d0000000002000019000000000001042d0000040500000432000004060001042e0000040700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000ae0aa7d52bb8b176ababb741c4aa3f8493df606c18d25ef5ed85ca7ff1adbd96", - "deployedBytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001030010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002100000413d0000000301000367000000000101043b000000e001100270000001050210009c000000460000213d0000010c0210009c000000720000a13d0000010d0210009c000001830000613d0000010e0210009c000001b40000613d0000010f0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d0000002001000039000001000010044300000120000004430000010401000041000004060001042e000001060210009c000000a90000a13d000001070210009c000001db0000613d000001080210009c000001ff0000613d000001090110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d0000000000100435000000200000043f0000000001000019040503800000040f000000000101041a0000008001100270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000001100210009c000000cc0000613d000001110110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000301043b000001130130009c000002100000213d000000000100041100000002020000390000000202200188000000920000c13d0000ffff0210008c000002180000213d000080060110008c0000028b0000c13d0000000000300435000000200000043f0000000001000019000600000003001d040503800000040f000000000101041a000500000001001d0000000601000029040503920000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000010a0210009c0000013a0000613d0000010b0110009c000002100000c13d0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000101043b000001130210009c000002100000213d040503a20000040f000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e80000c13d000001210130009c000002180000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000113023001970000000401400039000100000002001d000000000021043500000103010000410000000002000414000001030320009c0000000002018019000001030340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040504000000040f000000060a000029000000000301001900000060033002700000010303300197000000400430008c000000400400003900000000040340190000001f0540018f0000000506400272000001130000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000010b0000413d000000000705004b000001220000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002650000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c000001340000213d0000000102200190000001340000c13d000000400010043f000000400230008c000002100000413d000001250210009c000002cf0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000600310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003010003670000000402100370000000000402043b000001130240009c000002100000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002100000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039000500000004001d040504000000040f00000005030000290000000102200190000002100000613d000000000101043b000000000101041a00000116011001970000000402000029000000000121004b000002ab0000a13d0000000601000029000000000101004b000002cd0000c13d000000400200043d000600000002001d000001180100004100000000001204350000000401200039040503f10000040f000000060400002900000000014100490000010302000041000001030310009c0000000001028019000001030340009c000000000204401900000040022002100000006001100210000000000121019f00000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000004010000390000000301100367000000000201043b000000020100003900000002011001880000019d0000c13d00000000010004110000ffff0110008c000002180000213d0000011b0120009c0000024d0000413d000000400100043d00000064021000390000011c03000041000000000032043500000044021000390000011d030000410000000000320435000000240210003900000030030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c700000407000104300000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d000000000100041100000000001004350000000101000039000000200010043f0000000001000019040503800000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f0000000001000019040503800000040f000000000101041a000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000400310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002100000c13d00000003020003670000000401200370000000000101043b000001130310009c000002100000213d0000002402200370000000000202043b040503b50000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e0000000001000416000000000101004b000002100000c13d000000040100008a00000000011000310000011202000041000000200310008c000000000300001900000000030240190000011201100197000000000401004b000000000200a019000001120110009c00000000010300190000000001026019000000000101004b000002120000613d000000000100001900000407000104300000000002000411000000020100003900000002011001880000022d0000c13d0000ffff0120008c0000022d0000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c000000000102801900000040011002100000011e011001c70000040700010430000600000002001d0000000000200435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011603100197000000000223004b000002990000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d0000000001000019040503800000040f0000000602000029000000000021041b0000000001000019000004060001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d040503800000040f000000000101041a000400000001001d0000000501000029040503920000040f000000060200002900000004030000290000000002230019000000000021041b0000011601300197000000400200043d00000000001204350000010301000041000001030320009c0000000001024019000000400110021000000114011001c7000004060001042e000000400200043d0000001f0430018f0000000503300272000002720000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000026a0000413d000000000504004b000002810000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000103010000410000000103000031000001030430009c0000000003018019000001030420009c000000000102401900000040011002100000006002300210000000000112019f0000040700010430000000400100043d00000118020000410000000000210435000000040210003900000020030000390000000000320435000000240210003900000000000204350000010302000041000001030310009c000000000102801900000040011002100000011f011001c70000040700010430000000400100043d00000044021000390000011703000041000000000032043500000024021000390000000f030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000000003004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000004020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000016f0000c13d0000000601000029000000000101004b000002ef0000c13d0000000001000019000004060001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002100000213d000000000221043600000005010000290000000001010433000000010310008c000002100000213d00000000001204350000000402000029000000000202004b000003010000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000400100043d00000044021000390000011a03000041000000000032043500000024021000390000001d030000390000000000320435000001180200004100000000002104350000000402100039000000200300003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c70000040700010430000000000101004b0000031b0000c13d0000000301000029000000000101004b0000031b0000613d00000001010000290000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011601100197000600000002001d000000000121004b0000034f0000a13d000000020100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000003020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040503fb0000040f0000000101200190000002100000613d000002cd0000013d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b00000006020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000002100000613d000000000101043b000000000101041a000000000101004b0000031b0000c13d000000400100043d00000044021000390000012603000041000000000032043500000118020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010302000041000001030310009c0000000001028019000000400110021000000119011001c7000004070001043000000103020000410000000003000414000001030430009c0000000003028019000001030410009c00000000010280190000004001100210000000c002300210000000000112019f00000115011001c70000801002000039040504000000040f0000000102200190000003900000613d000000000101043b000000000001042d000000000100001900000407000104300000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003a00000613d000000000101043b000000000001042d0000000001000019000004070001043000000113011001970000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003b30000613d000000000101043b000000000101041a0000011601100197000000000001042d000000000100001900000407000104300002000000000002000200000002001d0000011301100197000100000001001d0000000000100435000000200000043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d0000000102000039000000000101043b000000000101041a00000116011001970000000203000029000000000131004b000003ed0000213d000000010100002900000000001004350000000101000039000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b00000002020000290000000000200435000000200010043f00000103010000410000000002000414000001030320009c0000000001024019000000c00110021000000115011001c70000801002000039040504000000040f0000000102200190000003ef0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004070001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fe002104210000000102000039000000000001042d0000000002000019000000000001042d00000403002104230000000102000039000000000001042d0000000002000019000000000001042d0000040500000432000004060001042e0000040700010430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000ae0aa7d52bb8b176ababb741c4aa3f8493df606c18d25ef5ed85ca7ff1adbd96", + "bytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001020010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002080000413d0000000301000367000000000101043b000000e001100270000001040210009c000000460000213d0000010b0210009c000000720000a13d0000010c0210009c0000017b0000613d0000010d0210009c000001ac0000613d0000010e0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d0000002001000039000001000010044300000120000004430000010301000041000004050001042e000001050210009c000000a10000a13d000001060210009c000001d30000613d000001070210009c000001f70000613d000001080110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a0000008001100270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000010f0210009c000000c40000613d000001100110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000002000411000080060220008c0000025d0000c13d000600000001001d040403910000040f000000000101041a000500000001001d0000000601000029040403910000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000001090210009c000001320000613d0000010a0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d040403a10000040f000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e00000c13d000001210130009c000002100000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000112023001970000000401400039000100000002001d000000000021043500000102010000410000000002000414000001020320009c0000000002018019000001020340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040403ff0000040f000000060a000029000000000301001900000060033002700000010203300197000000400430008c000000400400003900000000040340190000001f0540018f00000005064002720000010b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001030000413d000000000705004b0000011a0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002720000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c0000012c0000213d00000001022001900000012c0000c13d000000400010043f000000400230008c000002080000413d000001250210009c000002ce0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000600310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003010003670000000402100370000000000402043b000001120240009c000002080000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002080000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039000500000004001d040403ff0000040f00000005030000290000000102200190000002080000613d000000000101043b000000000101041a00000115011001970000000402000029000000000121004b000002aa0000a13d0000000601000029000000000101004b000002cc0000c13d000000400200043d000600000002001d000001170100004100000000001204350000000401200039040403f00000040f000000060400002900000000014100490000010202000041000001020310009c0000000001028019000001020340009c000000000204401900000040022002100000006001100210000000000121019f00000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000201043b00000002010000390000000201100188000001950000c13d00000000010004110000ffff0110008c000002100000213d0000011a0120009c000002450000413d000000400100043d00000064021000390000011b03000041000000000032043500000044021000390000011c030000410000000000320435000000240210003900000030030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c700000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000100041100000000001004350000000101000039000000200010043f00000000010000190404037f0000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003020003670000000401200370000000000101043b000001120310009c000002080000213d0000002402200370000000000202043b040403b40000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b0000020a0000613d00000000010000190000040600010430000000000200041100000002010000390000000201100188000002250000c13d0000ffff0120008c000002250000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000600000002001d0000000000200435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011503100197000000000223004b000002980000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d00000000010000190404037f0000040f0000000602000029000000000021041b0000000001000019000004050001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d0404037f0000040f000000000101041a000400000001001d0000000501000029040403910000040f000000060200002900000004030000290000000002230019000000000021041b0000011501300197000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000000400100043d00000064021000390000011e03000041000000000032043500000044021000390000011f03000041000000000032043500000024021000390000003d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000000400200043d0000001f0430018f00000005033002720000027f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000002770000413d000000000504004b0000028e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000102010000410000000103000031000001020430009c0000000003018019000001020420009c000000000102401900000040011002100000006002300210000000000112019f0000040600010430000000400100043d00000044021000390000011603000041000000000032043500000024021000390000000f030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000000003004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000004020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b000001670000c13d0000000601000029000000000101004b000002ee0000c13d0000000001000019000004050001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002080000213d000000000221043600000005010000290000000001010433000000010310008c000002080000213d00000000001204350000000402000029000000000202004b000003000000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000400100043d00000044021000390000011903000041000000000032043500000024021000390000001d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000000101004b0000031a0000c13d0000000301000029000000000101004b0000031a0000613d00000001010000290000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011501100197000600000002001d000000000121004b0000034e0000a13d000000020100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000003020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040403fa0000040f0000000101200190000002080000613d000002cc0000013d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000006020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b0000031a0000c13d000000400100043d00000044021000390000012603000041000000000032043500000117020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000114011001c70000801002000039040403ff0000040f00000001022001900000038f0000613d000000000101043b000000000001042d000000000100001900000406000104300000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f00000001022001900000039f0000613d000000000101043b000000000001042d0000000001000019000004060001043000000112011001970000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003b20000613d000000000101043b000000000101041a0000011501100197000000000001042d000000000100001900000406000104300002000000000002000200000002001d0000011201100197000100000001001d0000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d0000000102000039000000000101043b000000000101041a00000115011001970000000203000029000000000131004b000003ec0000213d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b00000002020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004060001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fd002104210000000102000039000000000001042d0000000002000019000000000001042d00000402002104230000000102000039000000000001042d0000000002000019000000000001042d0000040400000432000004050001042e0000040600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000006e6372656d656e7420746865206465706c6f796d656e74206e6f6e63650000004f6e6c792074686520636f6e7472616374206465706c6f7965722063616e2069000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000501c26608344a09e93fd75d75fa0338d79ed540145d531243c88c8adba134376", + "deployedBytecode": "0x0004000000000002000600000000000200030000000103550000006001100270000001020010019d000200000002001f000100000000001f0000008001000039000000400010043f00000001012001900000003e0000c13d0000000001000031000000040110008c000002080000413d0000000301000367000000000101043b000000e001100270000001040210009c000000460000213d0000010b0210009c000000720000a13d0000010c0210009c0000017b0000613d0000010d0210009c000001ac0000613d0000010e0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d0000002001000039000001000010044300000120000004430000010301000041000004050001042e000001050210009c000000a10000a13d000001060210009c000001d30000613d000001070210009c000001f70000613d000001080110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000000100435000000200000043f00000000010000190404037f0000040f000000000101041a0000008001100270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000010f0210009c000000c40000613d000001100110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d0000000002000411000080060220008c0000025d0000c13d000600000001001d040403910000040f000000000101041a000500000001001d0000000601000029040403910000040f00000005030000290000012002300041000000000021041b0000008001300270000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000001090210009c000001320000613d0000010a0110009c000002080000c13d0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000101043b000001120210009c000002080000213d040403a10000040f000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000300041100000003010003670000002402100370000000000402043b0000000401100370000000000201043b00000002010000390000000201100188000000e00000c13d000001210130009c000002100000813d000400000004001d000300000002001d000000400400043d000600000004001d00000122010000410000000001140436000500000001001d000200000003001d00000112023001970000000401400039000100000002001d000000000021043500000102010000410000000002000414000001020320009c0000000002018019000001020340009c00000000010440190000004001100210000000c002200210000000000112019f00000123011001c70000800602000039040403ff0000040f000000060a000029000000000301001900000060033002700000010203300197000000400430008c000000400400003900000000040340190000001f0540018f00000005064002720000010b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000001030000413d000000000705004b0000011a0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0000000102200190000002720000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000001240410009c0000012c0000213d00000001022001900000012c0000c13d000000400010043f000000400230008c000002080000413d000001250210009c000002ce0000a13d0000012a0100004100000000001004350000004101000039000000040010043f000001230100004100000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000600310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003010003670000000402100370000000000402043b000001120240009c000002080000213d0000004402100370000000000302043b000000000203004b0000000002000019000000010200c039000600000003001d000000000223004b000002080000c13d0000002401100370000000000101043b000400000001001d0000000000400435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039000500000004001d040403ff0000040f00000005030000290000000102200190000002080000613d000000000101043b000000000101041a00000115011001970000000402000029000000000121004b000002aa0000a13d0000000601000029000000000101004b000002cc0000c13d000000400200043d000600000002001d000001170100004100000000001204350000000401200039040403f00000040f000000060400002900000000014100490000010202000041000001020310009c0000000001028019000001020340009c000000000204401900000040022002100000006001100210000000000121019f00000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000004010000390000000301100367000000000201043b00000002010000390000000201100188000001950000c13d00000000010004110000ffff0110008c000002100000213d0000011a0120009c000002450000413d000000400100043d00000064021000390000011b03000041000000000032043500000044021000390000011c030000410000000000320435000000240210003900000030030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c700000406000104300000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d000000000100041100000000001004350000000101000039000000200010043f00000000010000190404037f0000040f00000004020000390000000302200367000000000202043b0000000000200435000000200010043f00000000010000190404037f0000040f000000000101041a000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000400310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b000002080000c13d00000003020003670000000401200370000000000101043b000001120310009c000002080000213d0000002402200370000000000202043b040403b40000040f000000000101004b0000000001000019000000010100c039000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e0000000001000416000000000101004b000002080000c13d000000040100008a00000000011000310000011102000041000000200310008c000000000300001900000000030240190000011101100197000000000401004b000000000200a019000001110110009c00000000010300190000000001026019000000000101004b0000020a0000613d00000000010000190000040600010430000000000200041100000002010000390000000201100188000002250000c13d0000ffff0120008c000002250000a13d000000400100043d00000064021000390000012b03000041000000000032043500000044021000390000012c030000410000000000320435000000240210003900000024030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000600000002001d0000000000200435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d00000004020000390000000302200367000000000202043b000000000101043b000000000101041a0000011503100197000000000223004b000002980000c13d00000006020000290000000000200435000000200000043f0000000101100039000600000001001d00000000010000190404037f0000040f0000000602000029000000000021041b0000000001000019000004050001042e0000000001000411000500000001001d0000000000100435000000200000043f0000000001000019000600000002001d0404037f0000040f000000000101041a000400000001001d0000000501000029040403910000040f000000060200002900000004030000290000000002230019000000000021041b0000011501300197000000400200043d00000000001204350000010201000041000001020320009c0000000001024019000000400110021000000113011001c7000004050001042e000000400100043d00000064021000390000011e03000041000000000032043500000044021000390000011f03000041000000000032043500000024021000390000003d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c000000000102801900000040011002100000011d011001c70000040600010430000000400200043d0000001f0430018f00000005033002720000027f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000002770000413d000000000504004b0000028e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000102010000410000000103000031000001020430009c0000000003018019000001020420009c000000000102401900000040011002100000006002300210000000000112019f0000040600010430000000400100043d00000044021000390000011603000041000000000032043500000024021000390000000f030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000000003004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000004020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b000001670000c13d0000000601000029000000000101004b000002ee0000c13d0000000001000019000004050001042e0000004002100039000000400020043f00000000020a0433000000010320008c000002080000213d000000000221043600000005010000290000000001010433000000010310008c000002080000213d00000000001204350000000402000029000000000202004b000003000000c13d000000400100043d00000044021000390000012903000041000000000032043500000024021000390000001e030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000400100043d00000044021000390000011903000041000000000032043500000024021000390000001d030000390000000000320435000001170200004100000000002104350000000402100039000000200300003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c70000040600010430000000000101004b0000031a0000c13d0000000301000029000000000101004b0000031a0000613d00000001010000290000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d0000000302000029000000010220008a000000000101043b000000000101041a0000011501100197000600000002001d000000000121004b0000034e0000a13d000000020100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000003020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b0000000402000029000000000021041b000000400100043d000000000021043500000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000127011001c70000800d020000390000000303000039000001280400004100000002050000290000000306000029040403fa0000040f0000000101200190000002080000613d000002cc0000013d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b00000006020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000002080000613d000000000101043b000000000101041a000000000101004b0000031a0000c13d000000400100043d00000044021000390000012603000041000000000032043500000117020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000000003204350000010202000041000001020310009c0000000001028019000000400110021000000118011001c7000004060001043000000102020000410000000003000414000001020430009c0000000003028019000001020410009c00000000010280190000004001100210000000c002300210000000000112019f00000114011001c70000801002000039040403ff0000040f00000001022001900000038f0000613d000000000101043b000000000001042d000000000100001900000406000104300000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f00000001022001900000039f0000613d000000000101043b000000000001042d0000000001000019000004060001043000000112011001970000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003b20000613d000000000101043b000000000101041a0000011501100197000000000001042d000000000100001900000406000104300002000000000002000200000002001d0000011201100197000100000001001d0000000000100435000000200000043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d0000000102000039000000000101043b000000000101041a00000115011001970000000203000029000000000131004b000003ec0000213d000000010100002900000000001004350000000101000039000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b00000002020000290000000000200435000000200010043f00000102010000410000000002000414000001020320009c0000000001024019000000c00110021000000114011001c70000801002000039040403ff0000040f0000000102200190000003ee0000613d000000000101043b000000000101041a000000000101004b0000000002000019000000010200c039000000010120018f000000000001042d0000000001000019000004060001043000000040021000390000012d03000041000000000032043500000020021000390000001c030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d000003fd002104210000000102000039000000000001042d0000000002000019000000000001042d00000402002104230000000102000039000000000001042d0000000002000019000000000001042d0000040400000432000004050001042e0000040600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006ee1dc1f00000000000000000000000000000000000000000000000000000000cab7e8ea00000000000000000000000000000000000000000000000000000000cab7e8eb00000000000000000000000000000000000000000000000000000000e1239cd800000000000000000000000000000000000000000000000000000000fb1a9a57000000000000000000000000000000000000000000000000000000006ee1dc2000000000000000000000000000000000000000000000000000000000896909dc0000000000000000000000000000000000000000000000000000000038a780910000000000000000000000000000000000000000000000000000000038a780920000000000000000000000000000000000000000000000000000000055d35d18000000000000000000000000000000000000000000000000000000005aa9b6b500000000000000000000000000000000000000000000000000000000155fd27a00000000000000000000000000000000000000000000000000000000306395c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff496e636f7272656374206e6f6e6365000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000546865206e6f6e636520776173206e6f7420736574206173207573656400000000000000000000000000000000000000000000000000000000000001000000016f6e636520697320746f6f2068696768000000000000000000000000000000005468652076616c756520666f7220696e6372656d656e74696e6720746865206e00000000000000000000000000000000000000840000000000000000000000006e6372656d656e7420746865206465706c6f796d656e74206e6f6e63650000004f6e6c792074686520636f6e7472616374206465706c6f7965722063616e2069000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100007b510fe8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf50726576696f7573206e6f6e636520686173206e6f74206265656e20757365640200000000000000000000000000000000000020000000000000000000000000da2b716e5a5d5f602b9a5842bcd89c215b125258dfea271a03e5e0e801d93a8c4e6f6e63652076616c75652063616e6e6f742062652073657420746f203000004e487b7100000000000000000000000000000000000000000000000000000000666c61670000000000000000000000000000000000000000000000000000000054686973206d6574686f6420726571756972652073797374656d2063616c6c2052657573696e67207468652073616d65206e6f6e636520747769636500000000501c26608344a09e93fd75d75fa0338d79ed540145d531243c88c8adba134376", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/SHA256.yul.zbin b/src/deps/contracts/SHA256.yul.zbin index 2d3dcb4d..81eea3d7 100644 Binary files a/src/deps/contracts/SHA256.yul.zbin and b/src/deps/contracts/SHA256.yul.zbin differ diff --git a/src/deps/contracts/SystemContext.json b/src/deps/contracts/SystemContext.json index cd766149..35112544 100644 --- a/src/deps/contracts/SystemContext.json +++ b/src/deps/contracts/SystemContext.json @@ -402,8 +402,8 @@ "type": "function" } ], - "bytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001dc0010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001e00320009c0000004a0000213d000001f20320009c000000580000a13d000001f30120009c000000b10000a13d000001f40120009c0000013d0000213d000001f70120009c0000019d0000613d000001f80120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020501100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000001dc010000410000000302000039000000000012041b0000000401000039000000000201041a000001dd0220019700008001022001bf000000000021041b000001de010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001df010000410000076c0001042e000001e10120009c0000008b0000a13d000001e20120009c000000d20000a13d000001e30120009c0000017e0000213d000001e60120009c000001b80000613d000001e70120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001fc0320009c000000f50000213d000002000320009c000001d60000613d000002010320009c0000022a0000613d000002020120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b0000004004200039000000000034043500000040030000390000000000320435000002130320009c000004530000213d0000006003200039000000400030043f0000000002020433000600000005001d076b062b0000040f0000000602000029000000000012041b00000000010000190000076c0001042e000001eb0120009c0000011a0000213d000001ef0120009c000002840000613d000001f00120009c000002880000613d000001f10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b06800000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e000001f90120009c000002a40000613d000001fa0120009c000002c00000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001e80120009c000002dc0000613d000001e90120009c000002f80000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000076c0001042e000001fd0120009c0000031c0000613d000001fe0120009c000003370000613d000001ff0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000001ec0120009c000003600000613d000001ed0120009c0000037c0000613d000001ee0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f00000205022001970000008001100210000000000121019f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001f50120009c000003960000613d000001f60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002080320009c000004530000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000205034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b0000000005000019000004800000a13d0000000005160049000001010550008c0000000005000019000004800000813d00000000020204330000020502200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b000000000501041a000004800000013d000001e40120009c000003d90000613d000001e50120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000800310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002050220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002050110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d000002320250009c000004530000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000205022001970000000000250435000400000004001d000000000224004b000004590000a13d000300000001001d076b06930000040f0000000502000029000000000121013f000002050110019800000000010000190000000101006039076b072f0000040f0000000401000029076b07470000040f0000000301000029076b071d0000040f0000000602000029000000000021041b0000000301000029076b06930000040f000500000001001d076b06610000040f000000050200002900000205022001970000002003100039000000000023043500000004020000290000000000210435076b06b30000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000076c0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a00000000022000310000020303000041000000a00420008c000000000400001900000000040340190000020302200197000000000502004b000000000300a019000002030220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002050220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002050220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002050330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004880000c13d000000400400043d000002080340009c000004530000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020506500197000200000006001d0000000000640435000002050450009c000004c10000213d0000000204000029000000000404004b000004c70000c13d000000000102004b000005520000c13d000000400100043d0000006402100039000002300300004100000000003204350000004402100039000002310300004100000000003204350000002402100039000000210300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000010e01000039000000000201041a0000021202200197000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002070110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000000101000039000000000201041a000001dd022001970000000603000029000000000232019f000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000600310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f000000400100043d076b06560000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020501100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400200043d0000000001000411000080010110008c000004100000c13d000002080120009c000004530000213d0000004001200039000000400010043f0000000701000039000000000301041a00000020042000390000008001300270000000000014043500000205073001970000000000720435000000400200043d000002080420009c000004530000213d0000004004200039000000400040043f0000000904000039000000000404041a00000020052000390000008006400270000000000065043500000205044001970000000000420435000002050230009c000004410000213d000000400100043d00000064021000390000020f03000041000000000032043500000044021000390000021003000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000076d0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019076b062b0000040f000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d0001043000000044012000390000020c03000041000000000031043500000024012000390000001f0300003900000000003104350000020d010000410000000000120435000000040120003900000020030000390000000000310435000001dc01000041000001dc0320009c000000000102401900000040011002100000020e011001c70000076d0001043000000212022001970000000103300039000000000223019f000000000021041b00000000010000190000076c0001042e000002090240009c0000044d0000413d000000000231004b0000044d0000413d000001012110011a0000000b01200039000000000501041a000004800000013d00000044025000390000020c03000041000000000032043500000024025000390000001f0300003900000000003204350000020d020000410000000000250435000000040250003900000020030000390000000000320435000001dc02000041000001dc0350009c0000000001020019000000000105401900000040011002100000020e011001c70000076d00010430000500000007001d000600000004001d076b06a80000040f076b071d0000040f000000050100002900000080011002100000000602000029000000000112019f0000000302000039000000000012041c00000000010000190000076c0001042e000000400200043d000000200300003900000000033204360000000000130435000002080120009c0000046a0000a13d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000004402100039000002330300004100000000003204350000020d02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d000104300000004001200039000000400010043f000001dc01000041000001dc0430009c000000000301801900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000703000039000000000303041a00000205033001970000000504000029000000000334004b000004a90000813d000000400100043d000000a402100039000002160300004100000000003204350000008402100039000002170300004100000000003204350000006402100039000002180300004100000000003204350000004402100039000002190300004100000000003204350000002402100039000000610300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000021a011001c70000076d000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000003f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000604000029000000000443004b000004ca0000613d000002050230009c000004f30000c13d000001140000013d0000000604000029000000000443004b000004f30000c13d000000000102004b0000053d0000c13d00000005010000290000000202000029000000000112004b0000057b0000c13d0000000601000029000000010110008a000002050210009c000001140000213d0000020501100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005d50000c13d0000000301000029000000000101004b000005cf0000613d000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000003c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000001023000390000000604000029000000000242004b0000056a0000c13d000000010230008a000002050420009c000001140000213d0000020502200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d00000080062000390000000000560435000000600520003900000000004504350000004004200039000000020500002900000000005404350000002004200039000000000034043500000000001204350000021b0120009c000004530000213d000000a001200039000000400010043f000001dc01000041000001dc0340009c0000000003010019000000000304401900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005ea0000c13d000000400100043d00000005020000290000000203000029000000000232004b000006140000a13d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002050210009c000001140000213d000005c80000013d000000400100043d0000006402100039000002220300004100000000003204350000004402100039000002230300004100000000003204350000002402100039000000350300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000601000029000000000101004b000005900000c13d000000400100043d00000064021000390000022e03000041000000000032043500000044021000390000022f03000041000000000032043500000024021000390000002c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400200043d000600000002001d0000020d0100004100000000001204350000000401200039076b069e0000040f00000006040000290000000001410049000001dc02000041000001dc0310009c0000000001028019000001dc0340009c000000000204401900000040022002100000006001100210000000000121019f0000076d00010430000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d0000000402000039000000000221043600000006030000290000020503300041000200000003001d000000e0033002100000000000320435000002080310009c000004530000213d0000004003100039000000400030043f000001dc03000041000001dc0420009c000000000203801900000040022002100000000001010433000001dc0410009c00000000010380190000006001100210000000000121019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005ff0000c13d00000002010000290000020501100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020501100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029076b06bb0000040f00000000010000190000076c0001042e000000400100043d0000006402100039000002260300004100000000003204350000004402100039000002270300004100000000003204350000002402100039000000330300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000021c03000041000000000032043500000044021000390000021d0300004100000000003204350000002402100039000000260300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d0300004100000000003204350000002402100039000000270300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000084021000390000021e03000041000000000032043500000064021000390000021f03000041000000000032043500000044021000390000022003000041000000000032043500000024021000390000005d0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d00010430000001dc03000041000001dc0410009c00000000010380190000004001100210000001dc0420009c00000000020380190000006002200210000000000112019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f00000001022001900000063f0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000006440000613d000000000001042d000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d00010430000002320210009c0000065b0000813d0000004001100039000000400010043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d000002320210009c000006670000813d0000004002100039000000400020043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000067a0000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000068d0000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000020501100197000002050210009c000006980000613d0000000101100039000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d0001043000000040021000390000023403000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000020501100197000000010110008a000002090210009c000006ad0000813d000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d000104300000000021010434000002050110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002090550009c000006d30000813d000000400500043d000002320650009c000006fc0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020506700197000000000665043600000080077002700000000000760435000000000808041a000002050880009c000006d00000213d00000000080504330000020508800198000006d60000613d0000020502200198000006e20000c13d000006fb0000013d0000000901000039000000000101041a000006f90000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023508800197000000000778019f000000000074041b0000020502200198000007080000613d0000000007060433000000010220008a00000205077001970000000002270019000002090720009c000007020000813d000000000026043500000205033001970000000000350435000002050210019700000000070604330000020508700197000000000828004b000006f60000413d0000008001100210000000000304041a0000020503300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000205013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000006402100039000002360300004100000000003204350000004402100039000002370300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000002050110019700000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f00000001022001900000072d0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000007320000613d000000000001042d000000400100043d0000006402100039000002380300004100000000003204350000004402100039000002390300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000205011001970000000902000039000000000202041a0000020502200197000000000121004b0000074e0000a13d000000000001042d000000400100043d00000084021000390000023a03000041000000000032043500000064021000390000023b03000041000000000032043500000044021000390000023c0300004100000000003204350000002402100039000000530300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d0001043000000769002104230000000102000039000000000001042d0000000002000019000000000001042d0000076b000004320000076c0001042e0000076d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000001342b6f236eec1b3605966b86908b668ad9c6d9034703df6c6b59c04d81a6fc6", - "deployedBytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001dc0010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001e00320009c0000004a0000213d000001f20320009c000000580000a13d000001f30120009c000000b10000a13d000001f40120009c0000013d0000213d000001f70120009c0000019d0000613d000001f80120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020501100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000001dc010000410000000302000039000000000012041b0000000401000039000000000201041a000001dd0220019700008001022001bf000000000021041b000001de010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001df010000410000076c0001042e000001e10120009c0000008b0000a13d000001e20120009c000000d20000a13d000001e30120009c0000017e0000213d000001e60120009c000001b80000613d000001e70120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001fc0320009c000000f50000213d000002000320009c000001d60000613d000002010320009c0000022a0000613d000002020120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b0000004004200039000000000034043500000040030000390000000000320435000002130320009c000004530000213d0000006003200039000000400030043f0000000002020433000600000005001d076b062b0000040f0000000602000029000000000012041b00000000010000190000076c0001042e000001eb0120009c0000011a0000213d000001ef0120009c000002840000613d000001f00120009c000002880000613d000001f10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b06800000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e000001f90120009c000002a40000613d000001fa0120009c000002c00000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001e80120009c000002dc0000613d000001e90120009c000002f80000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000076c0001042e000001fd0120009c0000031c0000613d000001fe0120009c000003370000613d000001ff0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000001ec0120009c000003600000613d000001ed0120009c0000037c0000613d000001ee0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f00000205022001970000008001100210000000000121019f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000001f50120009c000003960000613d000001f60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002080320009c000004530000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000205034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b0000000005000019000004800000a13d0000000005160049000001010550008c0000000005000019000004800000813d00000000020204330000020502200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b000000000501041a000004800000013d000001e40120009c000003d90000613d000001e50120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d076b066d0000040f0000020502200197000000400300043d0000002004300039000000000024043500000205011001970000000000130435000001dc01000041000001dc0230009c0000000001034019000000400110021000000206011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000800310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002050220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002050110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d000002320250009c000004530000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000205022001970000000000250435000400000004001d000000000224004b000004590000a13d000300000001001d076b06930000040f0000000502000029000000000121013f000002050110019800000000010000190000000101006039076b072f0000040f0000000401000029076b07470000040f0000000301000029076b071d0000040f0000000602000029000000000021041b0000000301000029076b06930000040f000500000001001d076b06610000040f000000050200002900000205022001970000002003100039000000000023043500000004020000290000000000210435076b06b30000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000076c0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a00000000022000310000020303000041000000a00420008c000000000400001900000000040340190000020302200197000000000502004b000000000300a019000002030220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002050220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002050220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002050330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004880000c13d000000400400043d000002080340009c000004530000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020506500197000200000006001d0000000000640435000002050450009c000004c10000213d0000000204000029000000000404004b000004c70000c13d000000000102004b000005520000c13d000000400100043d0000006402100039000002300300004100000000003204350000004402100039000002310300004100000000003204350000002402100039000000210300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000010e01000039000000000201041a0000021202200197000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002070110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f0000000101000039000000000201041a000001dd022001970000000603000029000000000232019f000000000021041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000600310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039076b06410000040f000000400100043d076b06560000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020501100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020701100197000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000000301004b000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400200043d0000000001000411000080010110008c000004100000c13d000002080120009c000004530000213d0000004001200039000000400010043f0000000701000039000000000301041a00000020042000390000008001300270000000000014043500000205073001970000000000720435000000400200043d000002080420009c000004530000213d0000004004200039000000400040043f0000000904000039000000000404041a00000020052000390000008006400270000000000065043500000205044001970000000000420435000002050230009c000004410000213d000000400100043d00000064021000390000020f03000041000000000032043500000044021000390000021003000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000001000416000000000101004b000003ea0000c13d000000040100008a00000000011000310000020302000041000000200310008c000000000300001900000000030240190000020301100197000000000401004b000000000200a019000002030110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000076d0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019076b062b0000040f000000000101041a000000400200043d0000000000120435000001dc01000041000001dc0320009c0000000001024019000000400110021000000204011001c70000076c0001042e000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d0001043000000044012000390000020c03000041000000000031043500000024012000390000001f0300003900000000003104350000020d010000410000000000120435000000040120003900000020030000390000000000310435000001dc01000041000001dc0320009c000000000102401900000040011002100000020e011001c70000076d0001043000000212022001970000000103300039000000000223019f000000000021041b00000000010000190000076c0001042e000002090240009c0000044d0000413d000000000231004b0000044d0000413d000001012110011a0000000b01200039000000000501041a000004800000013d00000044025000390000020c03000041000000000032043500000024025000390000001f0300003900000000003204350000020d020000410000000000250435000000040250003900000020030000390000000000320435000001dc02000041000001dc0350009c0000000001020019000000000105401900000040011002100000020e011001c70000076d00010430000500000007001d000600000004001d076b06a80000040f076b071d0000040f000000050100002900000080011002100000000602000029000000000112019f0000000302000039000000000012041c00000000010000190000076c0001042e000000400200043d000000200300003900000000033204360000000000130435000002080120009c0000046a0000a13d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000004402100039000002330300004100000000003204350000020d02000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d000104300000004001200039000000400010043f000001dc01000041000001dc0430009c000000000301801900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001dc02000041000001dc0310009c0000000001028019000000400110021000000204011001c70000076c0001042e0000000703000039000000000303041a00000205033001970000000504000029000000000334004b000004a90000813d000000400100043d000000a402100039000002160300004100000000003204350000008402100039000002170300004100000000003204350000006402100039000002180300004100000000003204350000004402100039000002190300004100000000003204350000002402100039000000610300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000021a011001c70000076d000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000003f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000604000029000000000443004b000004ca0000613d000002050230009c000004f30000c13d000001140000013d0000000604000029000000000443004b000004f30000c13d000000000102004b0000053d0000c13d00000005010000290000000202000029000000000112004b0000057b0000c13d0000000601000029000000010110008a000002050210009c000001140000213d0000020501100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005d50000c13d0000000301000029000000000101004b000005cf0000613d000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000003c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000001023000390000000604000029000000000242004b0000056a0000c13d000000010230008a000002050420009c000001140000213d0000020502200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d00000080062000390000000000560435000000600520003900000000004504350000004004200039000000020500002900000000005404350000002004200039000000000034043500000000001204350000021b0120009c000004530000213d000000a001200039000000400010043f000001dc01000041000001dc0340009c0000000003010019000000000304401900000040033002100000000002020433000001dc0420009c00000000020180190000006002200210000000000232019f0000000003000414000001dc0430009c0000000001034019000000c001100210000000000121019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005ea0000c13d000000400100043d00000005020000290000000203000029000000000232004b000006140000a13d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002050210009c000001140000213d000005c80000013d000000400100043d0000006402100039000002220300004100000000003204350000004402100039000002230300004100000000003204350000002402100039000000350300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d000104300000000601000029000000000101004b000005900000c13d000000400100043d00000064021000390000022e03000041000000000032043500000044021000390000022f03000041000000000032043500000024021000390000002c0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400200043d000600000002001d0000020d0100004100000000001204350000000401200039076b069e0000040f00000006040000290000000001410049000001dc02000041000001dc0310009c0000000001028019000001dc0340009c000000000204401900000040022002100000006001100210000000000121019f0000076d00010430000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000002f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d0000000402000039000000000221043600000006030000290000020503300041000200000003001d000000e0033002100000000000320435000002080310009c000004530000213d0000004003100039000000400030043f000001dc03000041000001dc0420009c000000000203801900000040022002100000000001010433000001dc0410009c00000000010380190000006001100210000000000121019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005ff0000c13d00000002010000290000020501100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002080210009c000004530000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020501100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029076b06bb0000040f00000000010000190000076c0001042e000000400100043d0000006402100039000002260300004100000000003204350000004402100039000002270300004100000000003204350000002402100039000000330300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000021c03000041000000000032043500000044021000390000021d0300004100000000003204350000002402100039000000260300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d0300004100000000003204350000002402100039000000270300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000084021000390000021e03000041000000000032043500000064021000390000021f03000041000000000032043500000044021000390000022003000041000000000032043500000024021000390000005d0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d00010430000001dc03000041000001dc0410009c00000000010380190000004001100210000001dc0420009c00000000020380190000006002200210000000000112019f0000000002000414000001dc0420009c0000000002038019000000c002200210000000000112019f0000020a011001c70000801002000039076b07660000040f00000001022001900000063f0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000006440000613d000000000001042d000000400100043d00000044021000390000020c03000041000000000032043500000024021000390000001f0300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c000000000102801900000040011002100000020e011001c70000076d00010430000002320210009c0000065b0000813d0000004001100039000000400010043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400100043d000002320210009c000006670000813d0000004002100039000000400020043f000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000067a0000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d00010430000000400300043d000002320130009c0000068d0000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000205022001970000000000230435000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000020501100197000002050210009c000006980000613d0000000101100039000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d0001043000000040021000390000023403000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000020501100197000000010110008a000002090210009c000006ad0000813d000000000001042d0000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d000104300000000021010434000002050110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002090550009c000006d30000813d000000400500043d000002320650009c000006fc0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020506700197000000000665043600000080077002700000000000760435000000000808041a000002050880009c000006d00000213d00000000080504330000020508800198000006d60000613d0000020502200198000006e20000c13d000006fb0000013d0000000901000039000000000101041a000006f90000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023508800197000000000778019f000000000074041b0000020502200198000007080000613d0000000007060433000000010220008a00000205077001970000000002270019000002090720009c000007020000813d000000000026043500000205033001970000000000350435000002050210019700000000070604330000020508700197000000000828004b000006f60000413d0000008001100210000000000304041a0000020503300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000205013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d0000022a0100004100000000001004350000004101000039000000040010043f0000022b010000410000076d000104300000022a0100004100000000001004350000001101000039000000040010043f0000022b010000410000076d00010430000000400100043d0000006402100039000002360300004100000000003204350000004402100039000002370300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d00010430000002050110019700000000001004350000000801000039000000200010043f000001dc010000410000000002000414000001dc0320009c0000000001024019000000c0011002100000020b011001c70000801002000039076b07660000040f00000001022001900000072d0000613d000000000101043b000000000001042d00000000010000190000076d00010430000000000101004b000007320000613d000000000001042d000000400100043d0000006402100039000002380300004100000000003204350000004402100039000002390300004100000000003204350000002402100039000000280300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000211011001c70000076d0001043000000205011001970000000902000039000000000202041a0000020502200197000000000121004b0000074e0000a13d000000000001042d000000400100043d00000084021000390000023a03000041000000000032043500000064021000390000023b03000041000000000032043500000044021000390000023c0300004100000000003204350000002402100039000000530300003900000000003204350000020d020000410000000000210435000000040210003900000020030000390000000000320435000001dc02000041000001dc0310009c0000000001028019000000400110021000000221011001c70000076d0001043000000769002104230000000102000039000000000001042d0000000002000019000000000001042d0000076b000004320000076c0001042e0000076d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000001342b6f236eec1b3605966b86908b668ad9c6d9034703df6c6b59c04d81a6fc6", + "bytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001d80010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001dc0320009c0000004a0000213d000001ee0320009c000000580000a13d000001ef0120009c000000b10000a13d000001f00120009c0000013d0000213d000001f30120009c0000019d0000613d000001f40120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020101100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000001d8010000410000000302000039000000000012041b0000000401000039000000000201041a000001d90220019700008001022001bf000000000021041b000001da010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001db010000410000075b0001042e000001dd0120009c0000008b0000a13d000001de0120009c000000d20000a13d000001df0120009c0000017e0000213d000001e20120009c000001b80000613d000001e30120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001f80320009c000000f50000213d000001fc0320009c000001d60000613d000001fd0320009c0000022a0000613d000001fe0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b00000040042000390000000000340435000000400300003900000000003204350000020f0320009c0000044d0000213d0000006003200039000000400030043f0000000002020433000600000005001d075a06250000040f0000000602000029000000000012041b00000000010000190000075b0001042e000001e70120009c0000011a0000213d000001eb0120009c000002840000613d000001ec0120009c000002880000613d000001ed0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a067a0000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e000001f50120009c000002a40000613d000001f60120009c000002c00000613d000001f70120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001e40120009c000002dc0000613d000001e50120009c000002f80000613d000001e60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000075b0001042e000001f90120009c0000031c0000613d000001fa0120009c000003370000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000001e80120009c000003600000613d000001e90120009c0000037c0000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f00000201022001970000008001100210000000000121019f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001f10120009c000003960000613d000001f20120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002040320009c0000044d0000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000201034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b00000000050000190000047a0000a13d0000000005160049000001010550008c00000000050000190000047a0000813d00000000020204330000020102200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b000000000501041a0000047a0000013d000001e00120009c000003d90000613d000001e10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000800310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002010220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002010110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d0000022e0250009c0000044d0000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000201022001970000000000250435000400000004001d000000000224004b000004530000a13d000300000001001d075a068d0000040f0000000502000029000000000121013f000002010110019800000000010000190000000101006039075a070c0000040f0000000401000029075a07360000040f0000000301000029075a07240000040f0000000602000029000000000021041b0000000301000029075a068d0000040f000500000001001d075a065b0000040f000000050200002900000201022001970000002003100039000000000023043500000004020000290000000000210435075a06a20000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000075b0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a0000000002200031000001ff03000041000000a00420008c00000000040000190000000004034019000001ff02200197000000000502004b000000000300a019000001ff0220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002010220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002010220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002010330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004820000c13d000000400400043d000002040340009c0000044d0000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020106500197000200000006001d0000000000640435000002010450009c000004bb0000213d0000000204000029000000000404004b000004c10000c13d000000000102004b0000054c0000c13d000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d03000041000000000032043500000024021000390000002103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000010e01000039000000000201041a0000020e02200197000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002030110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000000101000039000000000201041a000001d9022001970000000603000029000000000232019f000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000600310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f000000400100043d075a06500000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020101100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d0000000002000411000080010220008c000004100000c13d000002040210009c0000044d0000213d0000004002100039000000400020043f0000000702000039000000000202041a00000020031000390000008004200270000000000043043500000201032001970000000000310435000000400100043d000002040410009c0000044d0000213d0000004004100039000000400040043f0000000904000039000000000404041a00000020051000390000008006400270000000000065043500000201044001970000000000410435000002010120009c000004410000213d000000400100043d00000064021000390000020b03000041000000000032043500000044021000390000020c03000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000075c0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019075a06250000040f000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c0001043000000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000020e022001970000000103300039000000000223019f000000000021041b00000000010000190000075b0001042e000002050240009c000004470000413d000000000231004b000004470000413d000001012110011a0000000b01200039000000000501041a0000047a0000013d00000044025000390000020803000041000000000032043500000024025000390000001f03000039000000000032043500000209020000410000000000250435000000040250003900000020030000390000000000320435000001d802000041000001d80350009c0000000001020019000000000105401900000040011002100000020a011001c70000075c000104300000008001300210000000000114019f0000000302000039000000000012041c00000000010000190000075b0001042e000000400200043d000000200300003900000000033204360000000000130435000002040120009c000004640000a13d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d00000044021000390000022f0300004100000000003204350000020902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000004001200039000000400010043f000001d801000041000001d80430009c000000000301801900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000703000039000000000303041a00000201033001970000000504000029000000000334004b000004a30000813d000000400100043d000000a4021000390000021203000041000000000032043500000084021000390000021303000041000000000032043500000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000006103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c0000000001028019000000400110021000000216011001c70000075c000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021003000041000000000032043500000044021000390000021103000041000000000032043500000024021000390000003f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000604000029000000000443004b000004c40000613d000002010230009c000004ed0000c13d000001140000013d0000000604000029000000000443004b000004ed0000c13d000000000102004b000005370000c13d00000005010000290000000202000029000000000112004b000005750000c13d0000000601000029000000010110008a000002010210009c000001140000213d0000020101100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005cf0000c13d0000000301000029000000000101004b000005c90000613d000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000003c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000001023000390000000604000029000000000242004b000005640000c13d000000010230008a000002010420009c000001140000213d0000020102200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d0000008006200039000000000056043500000060052000390000000000450435000000400420003900000002050000290000000000540435000000200420003900000000003404350000000000120435000002170120009c0000044d0000213d000000a001200039000000400010043f000001d801000041000001d80340009c0000000003010019000000000304401900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005e40000c13d000000400100043d00000005020000290000000203000029000000000232004b0000060e0000a13d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002010210009c000001140000213d000005c20000013d000000400100043d00000064021000390000021e03000041000000000032043500000044021000390000021f03000041000000000032043500000024021000390000003503000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000601000029000000000101004b0000058a0000c13d000000400100043d00000064021000390000022a03000041000000000032043500000044021000390000022b03000041000000000032043500000024021000390000002c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400200043d000600000002001d000002090100004100000000001204350000000401200039075a06980000040f00000006040000290000000001410049000001d802000041000001d80310009c0000000001028019000001d80340009c000000000204401900000040022002100000006001100210000000000121019f0000075c00010430000000400100043d00000064021000390000022003000041000000000032043500000044021000390000022103000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d0000000402000039000000000221043600000006030000290000020103300041000200000003001d000000e0033002100000000000320435000002040310009c0000044d0000213d0000004003100039000000400030043f000001d803000041000001d80420009c000000000203801900000040022002100000000001010433000001d80410009c00000000010380190000006001100210000000000121019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005f90000c13d00000002010000290000020101100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020101100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029075a06aa0000040f00000000010000190000075b0001042e000000400100043d00000064021000390000022203000041000000000032043500000044021000390000022303000041000000000032043500000024021000390000003303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000021803000041000000000032043500000044021000390000021903000041000000000032043500000024021000390000002603000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000002703000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000084021000390000021a03000041000000000032043500000064021000390000021b03000041000000000032043500000044021000390000021c03000041000000000032043500000024021000390000005d03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c00010430000001d803000041000001d80410009c00000000010380190000004001100210000001d80420009c00000000020380190000006002200210000000000112019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000006390000613d000000000101043b000000000001042d00000000010000190000075c00010430000000000101004b0000063e0000613d000000000001042d000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000022e0210009c000006550000813d0000004001100039000000400010043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d0000022e0210009c000006610000813d0000004002100039000000400020043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006740000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006870000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c000104300000020101100197000002010210009c000006920000613d0000000101100039000000000001042d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c0001043000000040021000390000023003000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000000021010434000002010110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002050550009c000006c20000813d000000400500043d0000022e0650009c000006eb0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020106700197000000000665043600000080077002700000000000760435000000000808041a000002010880009c000006bf0000213d00000000080504330000020108800198000006c50000613d0000020102200198000006d10000c13d000006ea0000013d0000000901000039000000000101041a000006e80000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023108800197000000000778019f000000000074041b0000020102200198000006f70000613d0000000007060433000000010220008a00000201077001970000000002270019000002050720009c000006f10000813d000000000026043500000201033001970000000000350435000002010210019700000000070604330000020108700197000000000828004b000006e50000413d0000008001100210000000000304041a0000020103300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000201013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000000400100043d00000064021000390000023203000041000000000032043500000044021000390000023303000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000000101004b0000070f0000613d000000000001042d000000400100043d00000064021000390000023403000041000000000032043500000044021000390000023503000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000002010110019700000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000007340000613d000000000101043b000000000001042d00000000010000190000075c0001043000000201011001970000000902000039000000000202041a0000020102200197000000000121004b0000073d0000a13d000000000001042d000000400100043d00000084021000390000023603000041000000000032043500000064021000390000023703000041000000000032043500000044021000390000023803000041000000000032043500000024021000390000005303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c0001043000000758002104230000000102000039000000000001042d0000000002000019000000000001042d0000075a000004320000075b0001042e0000075c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000000be0c6cf64037e617675286e231b21587c8dedaf2b373135e6ddfb43a22f29d2", + "deployedBytecode": "0x0002000000000002000600000000000200010000000103550000006001100270000001d80010019d0000008001000039000000400010043f0000000102200190000000370000c13d0000000002000031000000040220008c000003ea0000413d0000000102000367000000000202043b000000e002200270000001dc0320009c0000004a0000213d000001ee0320009c000000580000a13d000001ef0120009c000000b10000a13d000001f00120009c0000013d0000213d000001f30120009c0000019d0000613d000001f40120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000020101100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000001d8010000410000000302000039000000000012041b0000000401000039000000000201041a000001d90220019700008001022001bf000000000021041b000001da010000410000000502000039000000000012041b000000200100003900000100001004430000012000000443000001db010000410000075b0001042e000001dd0120009c0000008b0000a13d000001de0120009c000000d20000a13d000001df0120009c0000017e0000213d000001e20120009c000001b80000613d000001e30120009c000003ea0000c13d0000000001000416000000000101004b000001bb0000613d000003ea0000013d000001f80320009c000000f50000213d000001fc0320009c000001d60000613d000001fd0320009c0000022a0000613d000001fe0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000000a05000039000000000305041a000000400200043d0000002001200039000000000031043500000004030000390000000103300367000000000303043b00000040042000390000000000340435000000400300003900000000003204350000020f0320009c0000044d0000213d0000006003200039000000400030043f0000000002020433000600000005001d075a06250000040f0000000602000029000000000012041b00000000010000190000075b0001042e000001e70120009c0000011a0000213d000001eb0120009c000002840000613d000001ec0120009c000002880000613d000001ed0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a067a0000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e000001f50120009c000002a40000613d000001f60120009c000002c00000613d000001f70120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000601000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001e40120009c000002dc0000613d000001e50120009c000002f80000613d000001e60120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f00000004010000390000000101100367000000000101043b0000000202000039000000000012041b00000000010000190000075b0001042e000001f90120009c0000031c0000613d000001fa0120009c000003370000613d000001fb0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c000003fe0000c13d0000010e01000039000000000201041a0000ffff0320018f0000ffff0430008c000004210000c13d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000001e80120009c000003600000613d000001e90120009c0000037c0000613d000001ea0120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f00000201022001970000008001100210000000000121019f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000001f10120009c000003960000613d000001f20120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000000400200043d000002040320009c0000044d0000213d0000010c03000039000000000503041a0000004003200039000000400030043f0000010d03000039000000000403041a00000201034001970000000006320436000000800340027000000000003604350000008006500270000000000516004b00000000050000190000047a0000a13d0000000005160049000001010550008c00000000050000190000047a0000813d00000000020204330000020102200197000000000221004b000004270000813d00000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b000000000501041a0000047a0000013d000001e00120009c000003d90000613d000001e10120009c000003ea0000c13d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000201000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000301000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d075a06670000040f0000020102200197000000400300043d0000002004300039000000000024043500000201011001970000000000130435000001d801000041000001d80230009c0000000001034019000000400110021000000202011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000800310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000001010003670000000402100370000000000202043b000600000002001d0000002402100370000000000202043b0000000004020019000002010220009c000003ea0000213d0000004401100370000000000101043b000500000001001d000002010110009c000003ea0000213d000000400500043d0000000002000411000080010220008c0000042f0000c13d0000022e0250009c0000044d0000813d0000004002500039000000400020043f0000000702000039000000000202041a00000020035000390000008001200270000000000013043500000201022001970000000000250435000400000004001d000000000224004b000004530000a13d000300000001001d075a068d0000040f0000000502000029000000000121013f000002010110019800000000010000190000000101006039075a070c0000040f0000000401000029075a07360000040f0000000301000029075a07240000040f0000000602000029000000000021041b0000000301000029075a068d0000040f000500000001001d075a065b0000040f000000050200002900000201022001970000002003100039000000000023043500000004020000290000000000210435075a06a20000040f00000064010000390000000101100367000000000101043b0000000602000039000000000012041b00000004010000390000000602000029000000000021041c00000000010000190000075b0001042e0000000002000416000000000202004b000003ea0000c13d000000040200008a0000000002200031000001ff03000041000000a00420008c00000000040000190000000004034019000001ff02200197000000000502004b000000000300a019000001ff0220009c00000000020400190000000002036019000000000202004b000003ea0000c13d00000001030003670000000402300370000000000202043b000600000002001d000002010220009c000003ea0000213d0000002402300370000000000202043b000500000002001d000002010220009c000003ea0000213d0000004402300370000000000202043b000400000002001d0000006402300370000000000202043b000000000402004b0000000004000019000000010400c039000000000442004b000003ea0000c13d0000008403300370000000000303043b000300000003001d000002010330009c000003ea0000213d0000000003000411000080010330008c000003fe0000c13d000000000302004b000004820000c13d000000400400043d000002040340009c0000044d0000213d0000004003400039000000400030043f0000000903000039000100000003001d000000000503041a0000002006400039000000800350027000000000003604350000020106500197000200000006001d0000000000640435000002010450009c000004bb0000213d0000000204000029000000000404004b000004c10000c13d000000000102004b0000054c0000c13d000000400100043d00000064021000390000022c03000041000000000032043500000044021000390000022d03000041000000000032043500000024021000390000002103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000003dc0000013d0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000010e01000039000000000201041a0000020e02200197000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000010c01000039000000000101041a0000008001100270000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000401000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d00000004010000390000000101100367000000000101043b000600000001001d000002030110009c000003ea0000213d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f0000000101000039000000000201041a000001d9022001970000000603000029000000000232019f000000000021041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000501000039000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000600310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000001000411000080010110008c00000000010000190000000101006039075a063b0000040f000000400100043d075a06500000040f00000001010003670000002402100370000000000202043b00000080022002100000000401100370000000000101043b0000020101100197000000000121019f0000000702000039000000000012041b00000044010000390000000101100367000000000101043b0000000602000039000000000012041b00000000010000190000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d0000000101000039000000000101041a0000020301100197000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d000000000200041a0000000000210435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000000301004b00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ea0000c13d000000400100043d0000000002000411000080010220008c000004100000c13d000002040210009c0000044d0000213d0000004002100039000000400020043f0000000702000039000000000202041a00000020031000390000008004200270000000000043043500000201032001970000000000310435000000400100043d000002040410009c0000044d0000213d0000004004100039000000400040043f0000000904000039000000000404041a00000020051000390000008006400270000000000065043500000201044001970000000000410435000002010120009c000004410000213d000000400100043d00000064021000390000020b03000041000000000032043500000044021000390000020c03000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000001000416000000000101004b000003ea0000c13d000000040100008a0000000001100031000001ff02000041000000200310008c00000000030000190000000003024019000001ff01100197000000000401004b000000000200a019000001ff0110009c00000000010300190000000001026019000000000101004b000003ec0000613d00000000010000190000075c0001043000000004010000390000000101100367000000000101043b00000000001004350000000801000039000000200010043f00000040020000390000000001000019075a06250000040f000000000101041a000000400200043d0000000000120435000001d801000041000001d80320009c0000000001024019000000400110021000000200011001c70000075b0001042e000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c0001043000000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000020e022001970000000103300039000000000223019f000000000021041b00000000010000190000075b0001042e000002050240009c000004470000413d000000000231004b000004470000413d000001012110011a0000000b01200039000000000501041a0000047a0000013d00000044025000390000020803000041000000000032043500000024025000390000001f03000039000000000032043500000209020000410000000000250435000000040250003900000020030000390000000000320435000001d802000041000001d80350009c0000000001020019000000000105401900000040011002100000020a011001c70000075c000104300000008001300210000000000114019f0000000302000039000000000012041c00000000010000190000075b0001042e000000400200043d000000200300003900000000033204360000000000130435000002040120009c000004640000a13d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d00000044021000390000022f0300004100000000003204350000020902000041000000000021043500000024021000390000002003000039000000000032043500000004021000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000004001200039000000400010043f000001d801000041000001d80430009c000000000301801900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000501043b000000400100043d0000000000510435000001d802000041000001d80310009c0000000001028019000000400110021000000200011001c70000075b0001042e0000000703000039000000000303041a00000201033001970000000504000029000000000334004b000004a30000813d000000400100043d000000a4021000390000021203000041000000000032043500000084021000390000021303000041000000000032043500000064021000390000021403000041000000000032043500000044021000390000021503000041000000000032043500000024021000390000006103000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c0000000001028019000000400110021000000216011001c70000075c000104300000000303000029000000000303004b0000025a0000c13d000000400100043d00000064021000390000021003000041000000000032043500000044021000390000021103000041000000000032043500000024021000390000003f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000604000029000000000443004b000004c40000613d000002010230009c000004ed0000c13d000001140000013d0000000604000029000000000443004b000004ed0000c13d000000000102004b000005370000c13d00000005010000290000000202000029000000000112004b000005750000c13d0000000601000029000000010110008a000002010210009c000001140000213d0000020101100197000001012110011a0000000b01200039000000000101041a0000000402000029000000000112004b000005cf0000c13d0000000301000029000000000101004b000005c90000613d000000400100043d00000064021000390000022403000041000000000032043500000044021000390000022503000041000000000032043500000024021000390000003c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000001023000390000000604000029000000000242004b000005640000c13d000000010230008a000002010420009c000001140000213d0000020102200197000001014220011a0000000b02400039000000000402041a0000000a02000039000000000502041a000000400200043d0000008006200039000000000056043500000060052000390000000000450435000000400420003900000002050000290000000000540435000000200420003900000000003404350000000000120435000002170120009c0000044d0000213d000000a001200039000000400010043f000001d801000041000001d80340009c0000000003010019000000000304401900000040033002100000000002020433000001d80420009c00000000020180190000006002200210000000000232019f0000000003000414000001d80430009c0000000001034019000000c001100210000000000121019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000112004b000005e40000c13d000000400100043d00000005020000290000000203000029000000000232004b0000060e0000a13d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a000002010210009c000001140000213d000005c20000013d000000400100043d00000064021000390000021e03000041000000000032043500000044021000390000021f03000041000000000032043500000024021000390000003503000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c000104300000000601000029000000000101004b0000058a0000c13d000000400100043d00000064021000390000022a03000041000000000032043500000044021000390000022b03000041000000000032043500000024021000390000002c03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400200043d000600000002001d000002090100004100000000001204350000000401200039075a06980000040f00000006040000290000000001410049000001d802000041000001d80310009c0000000001028019000001d80340009c000000000204401900000040022002100000006001100210000000000121019f0000075c00010430000000400100043d00000064021000390000022003000041000000000032043500000044021000390000022103000041000000000032043500000024021000390000002f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d0000000402000039000000000221043600000006030000290000020103300041000200000003001d000000e0033002100000000000320435000002040310009c0000044d0000213d0000004003100039000000400030043f000001d803000041000001d80420009c000000000203801900000040022002100000000001010433000001d80410009c00000000010380190000006001100210000000000121019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000003ea0000613d000000000101043b0000000402000029000000000121004b000005f90000c13d00000002010000290000020101100197000001012110011a0000000b012000390000000402000029000000000021041b000000400100043d000002040210009c0000044d0000213d0000004002100039000000400020043f000000200210003900000006030000290000000000320435000000050200002900000000002104350000008001300210000000000112019f0000000102000029000000000012041b000000010130008a0000020101100197000001012110011a0000000b012000390000000402000029000000000021041b0000000a01000039000000000001041b000000060100002900000003020000290000000503000029075a06aa0000040f00000000010000190000075b0001042e000000400100043d00000064021000390000022203000041000000000032043500000044021000390000022303000041000000000032043500000024021000390000003303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000021803000041000000000032043500000044021000390000021903000041000000000032043500000024021000390000002603000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000400100043d00000064021000390000022803000041000000000032043500000044021000390000022903000041000000000032043500000024021000390000002703000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c0001043000000084021000390000021a03000041000000000032043500000064021000390000021b03000041000000000032043500000044021000390000021c03000041000000000032043500000024021000390000005d03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c00010430000001d803000041000001d80410009c00000000010380190000004001100210000001d80420009c00000000020380190000006002200210000000000112019f0000000002000414000001d80420009c0000000002038019000000c002200210000000000112019f00000206011001c70000801002000039075a07550000040f0000000102200190000006390000613d000000000101043b000000000001042d00000000010000190000075c00010430000000000101004b0000063e0000613d000000000001042d000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020a011001c70000075c000104300000022e0210009c000006550000813d0000004001100039000000400010043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400100043d0000022e0210009c000006610000813d0000004002100039000000400020043f000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006740000813d0000004001300039000000400010043f0000000701000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000000400300043d0000022e0130009c000006870000813d0000004001300039000000400010043f0000000901000039000000000201041a00000020043000390000008001200270000000000014043500000201022001970000000000230435000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c000104300000020101100197000002010210009c000006920000613d0000000101100039000000000001042d000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c0001043000000040021000390000023003000041000000000032043500000020021000390000001b030000390000000000320435000000200200003900000000002104350000006001100039000000000001042d0000000021010434000002010110019700000000020204330000008002200210000000000112019f0000000702000039000000000012041b000000000001042d0000010d04000039000000000504041a000002050550009c000006c20000813d000000400500043d0000022e0650009c000006eb0000813d0000004006500039000000400060043f0000010c08000039000000000708041a0000020106700197000000000665043600000080077002700000000000760435000000000808041a000002010880009c000006bf0000213d00000000080504330000020108800198000006c50000613d0000020102200198000006d10000c13d000006ea0000013d0000000901000039000000000101041a000006e80000013d0000000707000039000000000707041a00000080077002700000000000760435000000000804041a0000023108800197000000000778019f000000000074041b0000020102200198000006f70000613d0000000007060433000000010220008a00000201077001970000000002270019000002050720009c000006f10000813d000000000026043500000201033001970000000000350435000002010210019700000000070604330000020108700197000000000828004b000006e50000413d0000008001100210000000000304041a0000020103300197000000000113019f000000000014041b00000000002604350000000003050433000000000702001900000201013001970000008002700210000000000112019f0000010c02000039000000000012041b000000000001042d000002260100004100000000001004350000004101000039000000040010043f00000227010000410000075c00010430000002260100004100000000001004350000001101000039000000040010043f00000227010000410000075c00010430000000400100043d00000064021000390000023203000041000000000032043500000044021000390000023303000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000000000101004b0000070f0000613d000000000001042d000000400100043d00000064021000390000023403000041000000000032043500000044021000390000023503000041000000000032043500000024021000390000002803000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000020d011001c70000075c00010430000002010110019700000000001004350000000801000039000000200010043f000001d8010000410000000002000414000001d80320009c0000000001024019000000c00110021000000207011001c70000801002000039075a07550000040f0000000102200190000007340000613d000000000101043b000000000001042d00000000010000190000075c0001043000000201011001970000000902000039000000000202041a0000020102200197000000000121004b0000073d0000a13d000000000001042d000000400100043d00000084021000390000023603000041000000000032043500000064021000390000023703000041000000000032043500000044021000390000023803000041000000000032043500000024021000390000005303000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001d802000041000001d80310009c000000000102801900000040011002100000021d011001c70000075c0001043000000758002104230000000102000039000000000001042d0000000002000019000000000001042d0000075a000004320000075b0001042e0000075c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e1bc9bf0400000000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000085df51fc00000000000000000000000000000000000000000000000000000000a6ae0aab00000000000000000000000000000000000000000000000000000000d0f2c66200000000000000000000000000000000000000000000000000000000ddeaa8e500000000000000000000000000000000000000000000000000000000ddeaa8e600000000000000000000000000000000000000000000000000000000fe173b9700000000000000000000000000000000000000000000000000000000d0f2c66300000000000000000000000000000000000000000000000000000000d4a4ca0d00000000000000000000000000000000000000000000000000000000a6ae0aac00000000000000000000000000000000000000000000000000000000a851ae7800000000000000000000000000000000000000000000000000000000bf1fe42000000000000000000000000000000000000000000000000000000000938b5f3100000000000000000000000000000000000000000000000000000000938b5f32000000000000000000000000000000000000000000000000000000009a8a059200000000000000000000000000000000000000000000000000000000a0803ef70000000000000000000000000000000000000000000000000000000085df51fd000000000000000000000000000000000000000000000000000000008ac84c0e000000000000000000000000000000000000000000000000000000008e8acf87000000000000000000000000000000000000000000000000000000003635f3e5000000000000000000000000000000000000000000000000000000007877a796000000000000000000000000000000000000000000000000000000007c9bd1f2000000000000000000000000000000000000000000000000000000007c9bd1f30000000000000000000000000000000000000000000000000000000080b41246000000000000000000000000000000000000000000000000000000007877a79700000000000000000000000000000000000000000000000000000000796b89b9000000000000000000000000000000000000000000000000000000003635f3e60000000000000000000000000000000000000000000000000000000042cbb15c000000000000000000000000000000000000000000000000000000006ef25c3a0000000000000000000000000000000000000000000000000000000019cae4610000000000000000000000000000000000000000000000000000000019cae4620000000000000000000000000000000000000000000000000000000029f172ad0000000000000000000000000000000000000000000000000000000030e5ccbd0000000000000000000000000000000000000000000000000000000002fa57790000000000000000000000000000000000000000000000000000000006bed0360000000000000000000000000000000000000000000000000000000006e7517b8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000043616c6c61626c65206f6e6c792062792074686520626f6f746c6f616465720008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000002067726561746572207468616e203000000000000000000000000000000000005468652063757272656e74206261746368206e756d626572206d7573742062650000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffff9f656174656420617420746865207374617274206f6620746865206261746368005468657265206d7573742062652061207669727475616c20626c6f636b206372680000000000000000000000000000000000000000000000000000000000000068652074696d657374616d70206f66207468652063757272656e74206261746373742062652067726561746572207468616e206f7220657175616c20746f20745468652074696d657374616d70206f6620746865204c3220626c6f636b206d7500000000000000000000000000000000000000c4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f6f727265637400000000000000000000000000000000000000000000000000005468652063757272656e74204c3220626c6f636b206861736820697320696e6374616d70206f66207468652070726576696f7573204c3220626c6f636b0000006b206d7573742062652067726561746572207468616e207468652074696d65735468652074696d657374616d70206f6620746865206e6577204c3220626c6f6300000000000000000000000000000000000000a40000000000000000000000006f6d207468652070726576696f7573206261746368000000000000000000000043616e206e6f74207265757365204c3220626c6f636b206e756d626572206672636b206d7573742062652073616d6500000000000000000000000000000000005468652074696d657374616d70206f66207468652073616d65204c3220626c6f20626c6f636b206d7573742062652073616d65000000000000000000000000005468652070726576696f75732068617368206f66207468652073616d65204c3220746865206d6964646c65206f6620746865206d696e69626c6f636b0000000043616e206e6f7420637265617465207669727475616c20626c6f636b7320696e4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000636f7272656374000000000000000000000000000000000000000000000000005468652070726576696f7573204c3220626c6f636b206861736820697320696e6420746f206265207a65726f00000000000000000000000000000000000000004c3220626c6f636b206e756d626572206973206e657665722065787065637465740000000000000000000000000000000000000000000000000000000000000055706772616465207472616e73616374696f6e206d7573742062652066697273000000000000000000000000000000000000000000000000ffffffffffffffc054696d657374616d70732073686f756c6420626520696e6372656d656e74616c496e76616c6964206e6577204c3220626c6f636b206e756d6265720000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000616c20626c6f636b00000000000000000000000000000000000000000000000043616e277420696e697469616c697a652074686520666972737420766972747520636f72726563740000000000000000000000000000000000000000000000005468652070726f766964656420626c6f636b206e756d626572206973206e6f74207468652070726576696f757320626c6f636b0000000000000000000000000062652067726561746572207468616e207468652074696d657374616d70206f665468652074696d657374616d70206f6620746865206261746368206d7573742000000000000000000000000000000000000000000000000000000000000000000be0c6cf64037e617675286e231b21587c8dedaf2b373135e6ddfb43a22f29d2", "linkReferences": {}, "deployedLinkReferences": {}, "factoryDeps": {} diff --git a/src/deps/contracts/fee_estimate.yul.zbin b/src/deps/contracts/fee_estimate.yul.zbin index 4ebe221c..dc2e655b 100644 Binary files a/src/deps/contracts/fee_estimate.yul.zbin and b/src/deps/contracts/fee_estimate.yul.zbin differ diff --git a/src/deps/contracts/fee_estimate_impersonating.yul.zbin b/src/deps/contracts/fee_estimate_impersonating.yul.zbin index e51f6782..e287b5bb 100644 Binary files a/src/deps/contracts/fee_estimate_impersonating.yul.zbin and b/src/deps/contracts/fee_estimate_impersonating.yul.zbin differ diff --git a/src/deps/contracts/gas_test.yul.zbin b/src/deps/contracts/gas_test.yul.zbin index 05e5a8e7..560d2ac2 100644 Binary files a/src/deps/contracts/gas_test.yul.zbin and b/src/deps/contracts/gas_test.yul.zbin differ diff --git a/src/deps/contracts/playground_batch.yul.zbin b/src/deps/contracts/playground_batch.yul.zbin index c1107392..f1689858 100644 Binary files a/src/deps/contracts/playground_batch.yul.zbin and b/src/deps/contracts/playground_batch.yul.zbin differ diff --git a/src/deps/contracts/proved_batch.yul.zbin b/src/deps/contracts/proved_batch.yul.zbin index ebad9bf2..bf29553f 100644 Binary files a/src/deps/contracts/proved_batch.yul.zbin and b/src/deps/contracts/proved_batch.yul.zbin differ diff --git a/src/deps/contracts/proved_batch_impersonating.yul.zbin b/src/deps/contracts/proved_batch_impersonating.yul.zbin index 8a6a2f59..1ee63af7 100644 Binary files a/src/deps/contracts/proved_batch_impersonating.yul.zbin and b/src/deps/contracts/proved_batch_impersonating.yul.zbin differ diff --git a/src/deps/mod.rs b/src/deps/mod.rs index f6c721bc..2ba82297 100644 --- a/src/deps/mod.rs +++ b/src/deps/mod.rs @@ -68,6 +68,12 @@ impl ReadStorage for &InMemoryStorage { fn load_factory_dep(&mut self, hash: H256) -> Option> { self.factory_deps.get(&hash).cloned() } + + fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { + // TODO: Update this file to use proper enumeration index value once it's exposed for forks via API + // This should happen as the migration of Boojum completes + Some(0_u64) + } } impl ReadStorage for InMemoryStorage { @@ -82,6 +88,10 @@ impl ReadStorage for InMemoryStorage { fn load_factory_dep(&mut self, hash: H256) -> Option> { (&*self).load_factory_dep(hash) } + + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + (&*self).get_enumeration_index(key) + } } /// Functionality to read from the VM storage. @@ -103,6 +113,9 @@ pub trait ReadStorage: fmt::Debug { let code_key = get_known_code_key(bytecode_hash); self.read_value(&code_key) != H256::zero() } + + /// Retrieves the enumeration index for a given `key`. + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option; } /// Functionality to write to the VM storage in a batch. diff --git a/src/deps/system_contracts.rs b/src/deps/system_contracts.rs index 4437e406..6ce359a0 100644 --- a/src/deps/system_contracts.rs +++ b/src/deps/system_contracts.rs @@ -1,6 +1,6 @@ use once_cell::sync::Lazy; use serde_json::Value; -use zksync_basic_types::{AccountTreeId, Address}; +use zksync_basic_types::{AccountTreeId, Address, H160}; use zksync_types::{ block::DeployedContract, ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, BOOTLOADER_UTILITIES_ADDRESS, COMPRESSOR_ADDRESS, CONTRACT_DEPLOYER_ADDRESS, @@ -10,6 +10,18 @@ use zksync_types::{ SHA256_PRECOMPILE_ADDRESS, SYSTEM_CONTEXT_ADDRESS, }; +/// The `ecAdd` system contract address. +pub const ECADD_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, +]); + +/// The `ecMul` system contract address. +pub const ECMUL_PRECOMPILE_ADDRESS: Address = H160([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, +]); + pub fn bytecode_from_slice(artifact_name: &str, contents: &[u8]) -> Vec { let artifact: Value = serde_json::from_slice(contents).expect(artifact_name); let bytecode = artifact["bytecode"] @@ -108,6 +120,16 @@ pub static COMPILED_IN_SYSTEM_CONTRACTS: Lazy> = Lazy::new EVENT_WRITER_ADDRESS, include_bytes!("contracts/EventWriter.yul.zbin").to_vec(), ), + ( + "ECADD_PRECOMPILE_ADDRESS", + ECADD_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcAdd.yul.zbin").to_vec(), + ), + ( + "ECMUL_PRECOMPILE_ADDRESS", + ECMUL_PRECOMPILE_ADDRESS, + include_bytes!("contracts/EcMul.yul.zbin").to_vec(), + ), ] .map(|(_pname, address, contents)| DeployedContract { account_id: AccountTreeId::new(address), diff --git a/src/evm.rs b/src/evm.rs deleted file mode 100644 index ed3efc78..00000000 --- a/src/evm.rs +++ /dev/null @@ -1,675 +0,0 @@ -use std::sync::{Arc, RwLock}; - -use crate::{ - fork::ForkSource, - node::{InMemoryNodeInner, Snapshot}, - utils::mine_empty_blocks, -}; -use jsonrpc_core::{BoxFuture, Result}; -use jsonrpc_derive::rpc; -use zksync_basic_types::U64; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_web3_decl::error::Web3Error; - -/// The maximum number of [Snapshot]s to store. Each snapshot represents the node state -/// and can be used to revert the node to an earlier point in time. -const MAX_SNAPSHOTS: u8 = 100; - -/// Implementation of EvmNamespace -pub struct EvmNamespaceImpl { - node: Arc>>, - /// List of snapshots of the [InMemoryNodeInner]. This is bounded at runtime by [MAX_SNAPSHOTS]. - snapshots: Arc>>, -} - -impl EvmNamespaceImpl { - /// Creates a new `Evm` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { - node, - snapshots: Default::default(), - } - } -} - -#[rpc] -pub trait EvmNamespaceT { - /// Increase the current timestamp for the node - /// - /// # Parameters - /// - `time_delta`: The number of seconds to increase time by - /// - /// # Returns - /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. - #[rpc(name = "evm_increaseTime")] - fn increase_time(&self, time_delta_seconds: u64) -> BoxFuture>; - - /// Force a single block to be mined. - /// - /// Will mine an empty block (containing zero transactions) - /// - /// # Returns - /// The string "0x0". - #[rpc(name = "evm_mine")] - fn evm_mine(&self) -> BoxFuture>; - - /// Set the current timestamp for the node. The timestamp must be in future. - /// - /// # Parameters - /// - `timestamp`: The timestamp to set the time to - /// - /// # Returns - /// The new timestamp value for the InMemoryNodeInner. - #[rpc(name = "evm_setNextBlockTimestamp")] - fn set_next_block_timestamp(&self, timestamp: u64) -> BoxFuture>; - - /// Set the current timestamp for the node. - /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be - /// mined before old blocks. This will result in an invalid state. - /// - /// # Parameters - /// - `time`: The timestamp to set the time to - /// - /// # Returns - /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. - #[rpc(name = "evm_setTime")] - fn set_time(&self, time: u64) -> BoxFuture>; - - /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot - /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot - /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same - /// point multiple times. - /// - /// # Returns - /// The `U64` identifier for this snapshot. - #[rpc(name = "evm_snapshot")] - fn snapshot(&self) -> BoxFuture>; - - /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, - /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots - /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) - /// - /// # Parameters - /// - `snapshot_id`: The snapshot id to revert. - /// - /// # Returns - /// `true` if a snapshot was reverted, otherwise `false`. - #[rpc(name = "evm_revert")] - fn revert_snapshot(&self, snapshot_id: U64) -> BoxFuture>; -} - -impl EvmNamespaceT - for EvmNamespaceImpl -{ - fn increase_time(&self, time_delta_seconds: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - if time_delta_seconds == 0 { - return Ok(time_delta_seconds); - } - - let time_delta = time_delta_seconds.saturating_mul(1000); - match inner.write() { - Ok(mut inner_guard) => { - inner_guard.current_timestamp = - inner_guard.current_timestamp.saturating_add(time_delta); - Ok(time_delta_seconds) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_next_block_timestamp(&self, timestamp: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - if timestamp < inner_guard.current_timestamp { - Err(into_jsrpc_error(Web3Error::InternalError)) - } else { - inner_guard.current_timestamp = timestamp; - Ok(timestamp) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_time(&self, time: u64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let time_diff = - (time as i128).saturating_sub(inner_guard.current_timestamp as i128); - inner_guard.current_timestamp = time; - Ok(time_diff) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn evm_mine(&self) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - mine_empty_blocks(&mut inner, 1, 1000); - tracing::info!("👷 Mined block #{}", inner.current_miniblock); - Ok("0x0".to_string()) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn snapshot(&self) -> BoxFuture> { - let inner = Arc::clone(&self.node); - let snapshots = Arc::clone(&self.snapshots); - - Box::pin(async move { - // validate max snapshots - snapshots - .read() - .map_err(|err| { - tracing::error!("failed acquiring read lock for snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - }) - .and_then(|snapshots| { - if snapshots.len() >= MAX_SNAPSHOTS as usize { - tracing::error!("maximum number of '{}' snapshots exceeded", MAX_SNAPSHOTS); - Err(into_jsrpc_error(Web3Error::InternalError)) - } else { - Ok(()) - } - })?; - - // snapshot the node - let snapshot = inner - .read() - .map_err(|err| { - format!("failed acquiring read lock to node for snapshot: {:?}", err) - }) - .and_then(|reader| reader.snapshot()) - .map_err(|err| { - tracing::error!("failed creating snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - })?; - snapshots - .write() - .map(|mut snapshots| { - snapshots.push(snapshot); - tracing::info!("Created snapshot '{}'", snapshots.len()); - snapshots.len() - }) - .map_err(|err| { - tracing::error!("failed storing snapshot: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - }) - .map(U64::from) - }) - } - - fn revert_snapshot(&self, snapshot_id: U64) -> BoxFuture> { - let inner = Arc::clone(&self.node); - let snapshots = Arc::clone(&self.snapshots); - - Box::pin(async move { - let mut snapshots = snapshots.write().map_err(|err| { - tracing::error!("failed acquiring read lock for snapshots: {:?}", err); - into_jsrpc_error(Web3Error::InternalError) - })?; - let snapshot_id_index = snapshot_id.as_usize().saturating_sub(1); - if snapshot_id_index >= snapshots.len() { - tracing::error!("no snapshot exists for the id '{}'", snapshot_id); - return Err(into_jsrpc_error(Web3Error::InternalError)); - } - - // remove all snapshots following the index and use the first snapshot for restore - let selected_snapshot = snapshots - .drain(snapshot_id_index..) - .next() - .expect("unexpected failure, value must exist"); - - inner - .write() - .map_err(|err| format!("failed acquiring read lock for snapshots: {:?}", err)) - .and_then(|mut writer| { - tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); - writer.restore_snapshot(selected_snapshot).map(|_| true) - }) - .or_else(|err| { - tracing::error!( - "failed restoring snapshot for id '{}': {}", - snapshot_id, - err - ); - Ok(false) - }) - }) - } -} - -#[cfg(test)] -mod tests { - use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; - use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; - - use super::*; - - #[tokio::test] - async fn test_increase_time_zero_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = 0u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - increase_value_seconds.saturating_mul(1000u64), - timestamp_after.saturating_sub(timestamp_before), - "timestamp did not increase by the specified amount", - ); - } - - #[tokio::test] - async fn test_increase_time_max_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = u64::MAX; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(0, timestamp_before, "initial timestamp must be non zero",); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - u64::MAX, - timestamp_after, - "timestamp did not saturate upon increase", - ); - } - - #[tokio::test] - async fn test_increase_time() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let increase_value_seconds = 100u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - let expected_response = increase_value_seconds; - - let actual_response = evm - .increase_time(increase_value_seconds) - .await - .expect("failed increasing timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - increase_value_seconds.saturating_mul(1000u64), - timestamp_after.saturating_sub(timestamp_before), - "timestamp did not increase by the specified amount", - ); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_future() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_timestamp = 10_000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!( - timestamp_before, new_timestamp, - "timestamps must be different" - ); - let expected_response = new_timestamp; - - let actual_response = evm - .set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - new_timestamp, timestamp_after, - "timestamp was not set correctly", - ); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_past_fails() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - let new_timestamp = timestamp_before + 500; - evm.set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - - let result = evm.set_next_block_timestamp(timestamp_before).await; - - assert!(result.is_err(), "expected an error for timestamp in past"); - } - - #[tokio::test] - async fn test_set_next_block_timestamp_same_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_timestamp = 1000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_eq!(timestamp_before, new_timestamp, "timestamps must be same"); - let expected_response = new_timestamp; - - let actual_response = evm - .set_next_block_timestamp(new_timestamp) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - timestamp_before, timestamp_after, - "timestamp must not change", - ); - } - - #[tokio::test] - async fn test_set_time_future() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 10_000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(timestamp_before, new_time, "timestamps must be different"); - let expected_response = 9000; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); - } - - #[tokio::test] - async fn test_set_time_past() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 10u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_ne!(timestamp_before, new_time, "timestamps must be different"); - let expected_response = -990; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); - } - - #[tokio::test] - async fn test_set_time_same_value() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let new_time = 1000u64; - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - assert_eq!(timestamp_before, new_time, "timestamps must be same"); - let expected_response = 0; - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .expect("failed reading timestamp"); - - assert_eq!(expected_response, actual_response, "erroneous response"); - assert_eq!( - timestamp_before, timestamp_after, - "timestamp must not change", - ); - } - - #[tokio::test] - async fn test_set_time_edges() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - for new_time in [0, u64::MAX] { - let timestamp_before = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); - assert_ne!( - timestamp_before, new_time, - "case {new_time}: timestamps must be different" - ); - let expected_response = (new_time as i128).saturating_sub(timestamp_before as i128); - - let actual_response = evm - .set_time(new_time) - .await - .expect("failed setting timestamp"); - let timestamp_after = node - .get_inner() - .read() - .map(|inner| inner.current_timestamp) - .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); - - assert_eq!( - expected_response, actual_response, - "case {new_time}: erroneous response" - ); - assert_eq!( - new_time, timestamp_after, - "case {new_time}: timestamp was not set correctly", - ); - } - } - - #[tokio::test] - async fn test_evm_mine() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - let result = evm.evm_mine().await.expect("evm_mine"); - assert_eq!(&result, "0x0"); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 1, current_block.number); - assert_eq!(start_block.timestamp + 1, current_block.timestamp); - - let result = evm.evm_mine().await.expect("evm_mine"); - assert_eq!(&result, "0x0"); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 2, current_block.number); - assert_eq!(start_block.timestamp + 2, current_block.timestamp); - } - - #[tokio::test] - async fn test_evm_snapshot_creates_incrementing_ids() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let snapshot_id_1 = evm.snapshot().await.expect("failed creating snapshot 1"); - let snapshot_id_2 = evm.snapshot().await.expect("failed creating snapshot 2"); - - assert_eq!(snapshot_id_1, U64::from(1)); - assert_eq!(snapshot_id_2, U64::from(2)); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_restores_state() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let initial_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - let snapshot_id = evm.snapshot().await.expect("failed creating snapshot"); - evm.evm_mine().await.expect("evm_mine"); - let current_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - assert_eq!(current_block, initial_block + 1); - - let reverted = evm - .revert_snapshot(snapshot_id) - .await - .expect("failed reverting snapshot"); - assert!(reverted); - - let restored_block = node - .get_block_number() - .await - .expect("failed fetching block number"); - assert_eq!(restored_block, initial_block); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_removes_all_snapshots_following_the_reverted_one() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let _snapshot_id_1 = evm.snapshot().await.expect("failed creating snapshot"); - let snapshot_id_2 = evm.snapshot().await.expect("failed creating snapshot"); - let _snapshot_id_3 = evm.snapshot().await.expect("failed creating snapshot"); - assert_eq!(3, evm.snapshots.read().unwrap().len()); - - let reverted = evm - .revert_snapshot(snapshot_id_2) - .await - .expect("failed reverting snapshot"); - assert!(reverted); - - assert_eq!(1, evm.snapshots.read().unwrap().len()); - } - - #[tokio::test] - async fn test_evm_revert_snapshot_fails_for_invalid_snapshot_id() { - let node = InMemoryNode::::default(); - let evm = EvmNamespaceImpl::new(node.get_inner()); - - let result = evm.revert_snapshot(U64::from(100)).await; - assert!(result.is_err()); - } -} diff --git a/src/fork.rs b/src/fork.rs index ab191419..f4cb9a27 100644 --- a/src/fork.rs +++ b/src/fork.rs @@ -148,6 +148,12 @@ impl ForkStorage { local_storage } } + + /// Retrieves the enumeration index for a given `key`. + fn get_enumeration_index_internal(&self, _key: &StorageKey) -> Option { + // TODO: Update this file to use proper enumeration index value once it's exposed for forks via API + Some(0_u64) + } } impl ReadStorage for ForkStorage { @@ -164,9 +170,8 @@ impl ReadStorage for ForkStorage { self.read_value_internal(key) } - fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { - // TODO:? - unimplemented!() + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + self.get_enumeration_index_internal(key) } } @@ -184,9 +189,8 @@ impl ReadStorage for &ForkStorage { self.load_factory_dep_internal(hash) } - fn get_enumeration_index(&mut self, _key: &StorageKey) -> Option { - // TODO:? - unimplemented!() + fn get_enumeration_index(&mut self, key: &StorageKey) -> Option { + self.get_enumeration_index_internal(key) } } @@ -270,6 +274,13 @@ pub trait ForkSource { /// Returns addresses of the default bridge contracts. fn get_bridge_contracts(&self) -> eyre::Result; + + /// Returns confirmed tokens + fn get_confirmed_tokens( + &self, + from: u32, + limit: u8, + ) -> eyre::Result>; } /// Holds the information about the original chain. @@ -290,10 +301,15 @@ pub struct ForkDetails { } const SUPPORTED_VERSIONS: &[ProtocolVersionId] = &[ + ProtocolVersionId::Version9, + ProtocolVersionId::Version10, + ProtocolVersionId::Version11, + ProtocolVersionId::Version12, ProtocolVersionId::Version13, ProtocolVersionId::Version14, ProtocolVersionId::Version15, ProtocolVersionId::Version16, + ProtocolVersionId::Version17, ]; pub fn supported_protocol_versions(version: ProtocolVersionId) -> bool { @@ -382,9 +398,11 @@ impl ForkDetails { pub async fn from_network_tx(fork: &str, tx: H256, cache_config: CacheConfig) -> Self { let (url, client) = Self::fork_to_url_and_client(fork); let tx_details = client.get_transaction_by_hash(tx).await.unwrap().unwrap(); - let overwrite_chain_id = Some(L2ChainId::try_from(tx_details.chain_id).unwrap_or_else( - |err| panic!("erroneous chain id {}: {:?}", tx_details.chain_id, err,), - )); + let overwrite_chain_id = Some( + L2ChainId::try_from(tx_details.chain_id.as_u64()).unwrap_or_else(|err| { + panic!("erroneous chain id {}: {:?}", tx_details.chain_id, err,) + }), + ); let miniblock_number = MiniblockNumber(tx_details.block_number.unwrap().as_u32()); // We have to sync to the one-miniblock before the one where transaction is. let l2_miniblock = miniblock_number.saturating_sub(1) as u64; diff --git a/src/formatter.rs b/src/formatter.rs index 080046eb..3a4993b4 100644 --- a/src/formatter.rs +++ b/src/formatter.rs @@ -2,13 +2,15 @@ use crate::{node::ShowCalls, resolver}; use colored::Colorize; + use serde::Deserialize; use std::collections::HashMap; +use std::str; use crate::fork::block_on; use zksync_basic_types::H160; -use vm::VmExecutionResultAndLogs; +use multivm::interface::VmExecutionResultAndLogs; use zksync_types::{vm_trace::Call, StorageLogQuery, StorageLogQueryType, VmEvent}; use lazy_static::lazy_static; @@ -74,12 +76,46 @@ pub fn print_event(event: &VmEvent, resolve_hashes: bool) { } tracing::info!( - "{} {}", + "{}", address_to_human_readable(event.address) .map(|x| format!("{:42}", x.blue())) - .unwrap_or(format!("{:42}", format!("{:?}", event.address).blue())), - tt.join(", ") + .unwrap_or(format!("{:42}", format!("{:?}", event.address).blue())) ); + + tracing::info!("{}", " Topics:".truecolor(128, 128, 128)); + for indexed_topic in &tt { + tracing::info!(" {}", indexed_topic); + } + + if event.value.is_empty() { + tracing::info!("{}", " Data: EMPTY".truecolor(128, 128, 128)); + } else { + match str::from_utf8(&event.value) { + Ok(v) => { + tracing::info!( + "{} {}", + " Data (String):".truecolor(128, 128, 128), + v.to_string() + ); + } + Err(_) => { + let hex_str = hex::encode(&event.value); + let display_str = if hex_str.len() > 200 { + format!("{}...", &hex_str[..200]) + } else { + hex_str.to_string() + }; + + tracing::info!( + "{} 0x{}", + " Data (Hex):".truecolor(128, 128, 128), + display_str + ); + } + }; + } + + tracing::info!(""); }); } @@ -201,8 +237,8 @@ pub fn print_vm_details(result: &VmExecutionResultAndLogs) { ); tracing::info!("Contracts Used: {}", result.statistics.contracts_used); match &result.result { - vm::ExecutionResult::Success { .. } => {} - vm::ExecutionResult::Revert { output } => { + multivm::interface::ExecutionResult::Success { .. } => {} + multivm::interface::ExecutionResult::Revert { output } => { tracing::info!(""); tracing::info!( "{}", @@ -213,7 +249,7 @@ pub fn print_vm_details(result: &VmExecutionResultAndLogs) { .on_red() ); } - vm::ExecutionResult::Halt { reason } => { + multivm::interface::ExecutionResult::Halt { reason } => { tracing::info!(""); tracing::info!("{}", format!("\n[!] Halt Reason: {}", reason).on_red()); } diff --git a/src/hardhat.rs b/src/hardhat.rs deleted file mode 100644 index dc99774e..00000000 --- a/src/hardhat.rs +++ /dev/null @@ -1,518 +0,0 @@ -use std::sync::{Arc, RwLock}; - -use crate::{ - fork::ForkSource, - node::InMemoryNodeInner, - utils::{bytecode_to_factory_dep, mine_empty_blocks, IntoBoxedFuture}, -}; -use jsonrpc_core::{BoxFuture, Result}; -use jsonrpc_derive::rpc; -use zksync_basic_types::{Address, U256, U64}; -use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; -use zksync_state::ReadStorage; -use zksync_types::{ - get_code_key, get_nonce_key, - utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, -}; -use zksync_utils::{h256_to_u256, u256_to_h256}; -use zksync_web3_decl::error::Web3Error; - -/// Implementation of HardhatNamespaceImpl -pub struct HardhatNamespaceImpl { - node: Arc>>, -} - -impl HardhatNamespaceImpl { - /// Creates a new `Hardhat` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} - -#[rpc] -pub trait HardhatNamespaceT { - /// Sets the balance of the given address to the given balance. - /// - /// # Arguments - /// - /// * `address` - The `Address` whose balance will be edited - /// * `balance` - The new balance to set for the given address, in wei - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setBalance")] - fn set_balance(&self, address: Address, balance: U256) -> BoxFuture>; - - /// Modifies an account's nonce by overwriting it. - /// - /// # Arguments - /// - /// * `address` - The `Address` whose nonce is to be changed - /// * `nonce` - The new nonce - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setNonce")] - fn set_nonce(&self, address: Address, balance: U256) -> BoxFuture>; - - /// Sometimes you may want to advance the latest block number of the network by a large number of blocks. - /// One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. - /// The hardhat_mine method can mine any number of blocks at once, in constant time. (It exhibits the same performance no matter how many blocks are mined.) - /// - /// # Arguments - /// - /// * `num_blocks` - The number of blocks to mine, defaults to 1 - /// * `interval` - The interval between the timestamps of each block, in seconds, and it also defaults to 1 - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_mine")] - fn hardhat_mine( - &self, - num_blocks: Option, - interval: Option, - ) -> BoxFuture>; - - /// Hardhat Network allows you to send transactions impersonating specific account and contract addresses. - /// To impersonate an account use this method, passing the address to impersonate as its parameter. - /// After calling this method, any transactions with this sender will be executed without verification. - /// Multiple addresses can be impersonated at once. - /// - /// # Arguments - /// - /// * `address` - The address to impersonate - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_impersonateAccount")] - fn impersonate_account(&self, address: Address) -> BoxFuture>; - - /// Use this method to stop impersonating an account after having previously used `hardhat_impersonateAccount` - /// The method returns `true` if the account was being impersonated and `false` otherwise. - /// - /// # Arguments - /// - /// * `address` - The address to stop impersonating. - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_stopImpersonatingAccount")] - fn stop_impersonating_account(&self, address: Address) -> BoxFuture>; - - /// Modifies the bytecode stored at an account's address. - /// - /// # Arguments - /// - /// * `address` - The address where the given code should be stored. - /// * `code` - The code to be stored. - /// - /// # Returns - /// - /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. - #[rpc(name = "hardhat_setCode")] - fn set_code(&self, address: Address, code: Vec) -> BoxFuture>; -} - -impl HardhatNamespaceT - for HardhatNamespaceImpl -{ - fn set_balance( - &self, - address: Address, - balance: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.node); - - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let balance_key = storage_key_for_eth_balance(&address); - inner_guard - .fork_storage - .set_value(balance_key, u256_to_h256(balance)); - tracing::info!( - "👷 Balance for address {:?} has been manually set to {} Wei", - address, - balance - ); - Ok(true) - } - Err(_) => { - let web3_error = Web3Error::InternalError; - Err(into_jsrpc_error(web3_error)) - } - } - }) - } - - fn set_nonce( - &self, - address: Address, - nonce: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner_guard) => { - let nonce_key = get_nonce_key(&address); - let full_nonce = inner_guard.fork_storage.read_value(&nonce_key); - let (mut account_nonce, mut deployment_nonce) = - decompose_full_nonce(h256_to_u256(full_nonce)); - if account_nonce >= nonce { - return Err(jsonrpc_core::Error::invalid_params(format!( - "Account Nonce is already set to a higher value ({}, requested {})", - account_nonce, nonce - ))); - } - account_nonce = nonce; - if deployment_nonce >= nonce { - return Err(jsonrpc_core::Error::invalid_params(format!( - "Deployment Nonce is already set to a higher value ({}, requested {})", - deployment_nonce, nonce - ))); - } - deployment_nonce = nonce; - let enforced_full_nonce = nonces_to_full_nonce(account_nonce, deployment_nonce); - tracing::info!( - "👷 Nonces for address {:?} have been set to {}", - address, - nonce - ); - inner_guard - .fork_storage - .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); - Ok(true) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn hardhat_mine( - &self, - num_blocks: Option, - interval: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - let num_blocks = num_blocks.unwrap_or_else(|| U64::from(1)); - let interval_ms = interval - .unwrap_or_else(|| U64::from(1)) - .saturating_mul(1_000.into()); - if num_blocks.is_zero() { - return Err(jsonrpc_core::Error::invalid_params( - "Number of blocks must be greater than 0".to_string(), - )); - } - mine_empty_blocks(&mut inner, num_blocks.as_u64(), interval_ms.as_u64()); - tracing::info!("👷 Mined {} blocks", num_blocks); - Ok(true) - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn impersonate_account(&self, address: Address) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - if inner.set_impersonated_account(address) { - tracing::info!("🕵️ Account {:?} has been impersonated", address); - Ok(true) - } else { - tracing::info!("🕵️ Account {:?} was already impersonated", address); - Ok(false) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn stop_impersonating_account(&self, address: Address) -> BoxFuture> { - let inner = Arc::clone(&self.node); - Box::pin(async move { - match inner.write() { - Ok(mut inner) => { - if inner.stop_impersonating_account(address) { - tracing::info!("🕵️ Stopped impersonating account {:?}", address); - Ok(true) - } else { - tracing::info!( - "🕵️ Account {:?} was not impersonated, nothing to stop", - address - ); - Ok(false) - } - } - Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)), - } - }) - } - - fn set_code(&self, address: Address, code: Vec) -> BoxFuture> { - let inner = Arc::clone(&self.node); - inner - .write() - .map(|mut writer| { - let code_key = get_code_key(&address); - tracing::info!("set code for address {address:#x}"); - let (hash, code) = bytecode_to_factory_dep(code); - let hash = u256_to_h256(hash); - writer.fork_storage.store_factory_dep( - hash, - code.iter() - .flat_map(|entry| { - let mut bytes = vec![0u8; 32]; - entry.to_big_endian(&mut bytes); - bytes.to_vec() - }) - .collect(), - ); - writer.fork_storage.set_value(code_key, hash); - }) - .map_err(|_| into_jsrpc_error(Web3Error::InternalError)) - .into_boxed_future() - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; - use std::str::FromStr; - use zksync_basic_types::{Nonce, H256}; - use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; - use zksync_types::{api::BlockNumber, fee::Fee, l2::L2Tx, PackedEthSignature}; - - #[tokio::test] - async fn test_set_balance() { - let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let balance_before = node.get_balance(address, None).await.unwrap(); - - let result = hardhat - .set_balance(address, U256::from(1337)) - .await - .unwrap(); - assert!(result); - - let balance_after = node.get_balance(address, None).await.unwrap(); - assert_eq!(balance_after, U256::from(1337)); - assert_ne!(balance_before, balance_after); - } - - #[tokio::test] - async fn test_set_nonce() { - let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let nonce_before = node.get_transaction_count(address, None).await.unwrap(); - - let result = hardhat.set_nonce(address, U256::from(1337)).await.unwrap(); - assert!(result); - - let nonce_after = node.get_transaction_count(address, None).await.unwrap(); - assert_eq!(nonce_after, U256::from(1337)); - assert_ne!(nonce_before, nonce_after); - - // setting nonce lower than the current one should fail - let result = hardhat.set_nonce(address, U256::from(1336)).await; - assert!(result.is_err()); - } - - #[tokio::test] - async fn test_hardhat_mine_default() { - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - // test with defaults - let result = hardhat - .hardhat_mine(None, None) - .await - .expect("hardhat_mine"); - assert!(result); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 1, current_block.number); - assert_eq!(start_block.timestamp + 1, current_block.timestamp); - let result = hardhat - .hardhat_mine(None, None) - .await - .expect("hardhat_mine"); - assert!(result); - - let current_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - assert_eq!(start_block.number + 2, current_block.number); - assert_eq!(start_block.timestamp + 2, current_block.timestamp); - } - - #[tokio::test] - async fn test_hardhat_mine_custom() { - let node = InMemoryNode::::default(); - let hardhat: HardhatNamespaceImpl = - HardhatNamespaceImpl::new(node.get_inner()); - - let start_block = node - .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) - .await - .unwrap() - .expect("block exists"); - - let num_blocks = 5; - let interval = 3; - let start_timestamp = start_block.timestamp + 1; - - let result = hardhat - .hardhat_mine(Some(U64::from(num_blocks)), Some(U64::from(interval))) - .await - .expect("hardhat_mine"); - assert!(result); - - for i in 0..num_blocks { - let current_block = node - .get_block_by_number(BlockNumber::Number(start_block.number + i + 1), false) - .await - .unwrap() - .expect("block exists"); - assert_eq!(start_block.number + i + 1, current_block.number); - assert_eq!( - start_timestamp + i * interval * 1_000, - current_block.timestamp - ); - } - } - - #[tokio::test] - async fn test_impersonate_account() { - let node = InMemoryNode::::default(); - let hardhat: HardhatNamespaceImpl = - HardhatNamespaceImpl::new(node.get_inner()); - let to_impersonate = - Address::from_str("0xd8da6bf26964af9d7eed9e03e53415d37aa96045").unwrap(); - - // give impersonated account some balance - let result = hardhat - .set_balance(to_impersonate, U256::exp10(18)) - .await - .unwrap(); - assert!(result); - - // construct a tx - let mut tx = L2Tx::new( - Address::random(), - vec![], - Nonce(0), - Fee { - gas_limit: U256::from(1_000_000), - max_fee_per_gas: U256::from(250_000_000), - max_priority_fee_per_gas: U256::from(250_000_000), - gas_per_pubdata_limit: U256::from(20000), - }, - to_impersonate, - U256::one(), - None, - Default::default(), - ); - tx.set_input(vec![], H256::random()); - if tx.common_data.signature.is_empty() { - tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); - } - - // try to execute the tx- should fail without signature - assert!(node.apply_txs(vec![tx.clone()]).is_err()); - - // impersonate the account - let result = hardhat - .impersonate_account(to_impersonate) - .await - .expect("impersonate_account"); - - // result should be true - assert!(result); - - // impersonating the same account again should return false - let result = hardhat - .impersonate_account(to_impersonate) - .await - .expect("impersonate_account"); - assert!(!result); - - // execution should now succeed - assert!(node.apply_txs(vec![tx.clone()]).is_ok()); - - // stop impersonating the account - let result = hardhat - .stop_impersonating_account(to_impersonate) - .await - .expect("stop_impersonating_account"); - - // result should be true - assert!(result); - - // stop impersonating the same account again should return false - let result = hardhat - .stop_impersonating_account(to_impersonate) - .await - .expect("stop_impersonating_account"); - assert!(!result); - - // execution should now fail again - assert!(node.apply_txs(vec![tx]).is_err()); - } - - #[tokio::test] - async fn test_set_code() { - let address = Address::repeat_byte(0x1); - let node = InMemoryNode::::default(); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - let new_code = vec![0x1u8; 32]; - - let code_before = node - .get_code(address, None) - .await - .expect("failed getting code") - .0; - assert_eq!(Vec::::default(), code_before); - - hardhat - .set_code(address, new_code.clone()) - .await - .expect("failed setting code"); - - let code_after = node - .get_code(address, None) - .await - .expect("failed getting code") - .0; - assert_eq!(new_code, code_after); - } -} diff --git a/src/http_fork_source.rs b/src/http_fork_source.rs index c375bd16..4cbb3439 100644 --- a/src/http_fork_source.rs +++ b/src/http_fork_source.rs @@ -1,33 +1,33 @@ -use std::sync::RwLock; +use std::sync::{Arc, RwLock}; +use crate::{ + cache::{Cache, CacheConfig}, + fork::{block_on, ForkSource}, +}; use eyre::Context; use zksync_basic_types::{H256, U256}; use zksync_types::api::{BridgeAddresses, Transaction}; +use zksync_web3_decl::types::Token; use zksync_web3_decl::{ jsonrpsee::http_client::{HttpClient, HttpClientBuilder}, namespaces::{EthNamespaceClient, ZksNamespaceClient}, types::Index, }; -use crate::{ - cache::{Cache, CacheConfig}, - fork::{block_on, ForkSource}, -}; - -#[derive(Debug)] +#[derive(Debug, Clone)] /// Fork source that gets the data via HTTP requests. pub struct HttpForkSource { /// URL for the network to fork. pub fork_url: String, /// Cache for network data. - pub(crate) cache: RwLock, + pub(crate) cache: Arc>, } impl HttpForkSource { pub fn new(fork_url: String, cache_config: CacheConfig) -> Self { Self { fork_url, - cache: RwLock::new(Cache::new(cache_config)), + cache: Arc::new(RwLock::new(Cache::new(cache_config))), } } @@ -306,6 +306,37 @@ impl ForkSource for HttpForkSource { }) .wrap_err("fork http client failed") } + + /// Returns known token addresses + fn get_confirmed_tokens(&self, from: u32, limit: u8) -> eyre::Result> { + if let Some(confirmed_tokens) = self + .cache + .read() + .ok() + .and_then(|guard| guard.get_confirmed_tokens(from, limit).cloned()) + { + tracing::debug!("using cached confirmed_tokens"); + return Ok(confirmed_tokens); + }; + + let client = self.create_client(); + block_on(async move { client.get_confirmed_tokens(from, limit).await }) + .map(|confirmed_tokens| { + self.cache + .write() + .map(|mut guard| { + guard.set_confirmed_tokens(from, limit, confirmed_tokens.clone()) + }) + .unwrap_or_else(|err| { + tracing::warn!( + "failed writing to cache for 'set_confirmed_tokens': {:?}", + err + ) + }); + confirmed_tokens + }) + .wrap_err("fork http client failed") + } } #[cfg(test)] @@ -669,8 +700,8 @@ mod tests { "result": { "l1Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l1_erc20_default_bridge), "l2Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l2_erc20_default_bridge), - "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.clone().unwrap()), - "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.clone().unwrap()) + "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.unwrap()), + "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.unwrap()) }, "id": 0 }), @@ -688,4 +719,43 @@ mod tests { .expect("failed fetching bridge addresses"); testing::assert_bridge_addresses_eq(&input_bridge_addresses, &actual_bridge_addresses); } + + #[test] + fn test_get_confirmed_tokens_is_cached() { + let mock_server = testing::MockServer::run(); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getConfirmedTokens", + "params": [0, 100] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": [ + { + "decimals": 18, + "l1Address": "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + "l2Address": "0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5", + "name": "Coinbase Wrapped Staked ETH", + "symbol": "cbETH" + } + ], + "id": 0 + }), + ); + + let fork_source = HttpForkSource::new(mock_server.url(), CacheConfig::Memory); + + let tokens = fork_source + .get_confirmed_tokens(0, 100) + .expect("failed fetching tokens"); + assert_eq!(tokens.len(), 1); + assert_eq!(tokens[0].symbol, "cbETH"); + + let tokens = fork_source + .get_confirmed_tokens(0, 100) + .expect("failed fetching tokens"); + assert_eq!(tokens.len(), 1); + } } diff --git a/src/lib.rs b/src/lib.rs index 36d7e081..d28de8ac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,20 +42,18 @@ //! Contributions to improve `era-test-node` are welcome. Please refer to the [contribution guidelines](https://github.com/matter-labs/era-test-node/blob/main/.github/CONTRIBUTING.md) for more details. pub mod bootloader_debug; -pub mod configuration_api; pub mod console_log; pub mod deps; -pub mod eth_test; pub mod filters; pub mod fork; pub mod formatter; pub mod http_fork_source; +pub mod namespaces; pub mod node; pub mod observability; pub mod resolver; pub mod system_contracts; pub mod utils; -pub mod zks; mod cache; mod testing; diff --git a/src/main.rs b/src/main.rs index 0bd0b914..c6ae60c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,31 @@ use crate::cache::CacheConfig; -use crate::hardhat::{HardhatNamespaceImpl, HardhatNamespaceT}; use crate::node::{InMemoryNodeConfig, ShowGasDetails, ShowStorageLogs, ShowVMDetails}; use crate::observability::Observability; use clap::{Parser, Subcommand, ValueEnum}; -use configuration_api::ConfigurationApiNamespaceT; -use debug::DebugNamespaceImpl; -use evm::{EvmNamespaceImpl, EvmNamespaceT}; use fork::{ForkDetails, ForkSource}; use logging_middleware::LoggingMiddleware; use node::ShowCalls; use observability::LogLevel; use tracing_subscriber::filter::LevelFilter; -use zks::ZkMockNamespaceImpl; mod bootloader_debug; mod cache; -mod configuration_api; mod console_log; -mod debug; mod deps; -mod eth_test; -mod evm; mod filters; mod fork; mod formatter; -mod hardhat; mod http_fork_source; mod logging_middleware; +mod namespaces; mod node; pub mod observability; mod resolver; mod system_contracts; mod testing; mod utils; -mod zks; use node::InMemoryNode; -use zksync_core::api_server::web3::namespaces::NetNamespace; use std::fs::File; use std::{ @@ -51,12 +40,11 @@ use futures::{ FutureExt, }; use jsonrpc_core::MetaIoHandler; -use zksync_basic_types::{L2ChainId, H160, H256}; +use zksync_basic_types::{H160, H256}; -use crate::eth_test::EthTestNodeNamespaceT; -use crate::{configuration_api::ConfigurationApiNamespace, node::TEST_NODE_NETWORK_ID}; -use zksync_core::api_server::web3::backend_jsonrpc::namespaces::{ - debug::DebugNamespaceT, eth::EthNamespaceT, net::NetNamespaceT, zks::ZksNamespaceT, +use crate::namespaces::{ + ConfigurationApiNamespaceT, DebugNamespaceT, EthNamespaceT, EthTestNodeNamespaceT, + EvmNamespaceT, HardhatNamespaceT, NetNamespaceT, Web3NamespaceT, ZksNamespaceT, }; /// List of wallets (address, private key) that we seed with tokens at start. @@ -105,30 +93,26 @@ pub const RICH_WALLETS: [(&str, &str); 10] = [ #[allow(clippy::too_many_arguments)] async fn build_json_http< - S: std::marker::Sync + std::marker::Send + 'static + ForkSource + std::fmt::Debug, + S: std::marker::Sync + std::marker::Send + 'static + ForkSource + std::fmt::Debug + Clone, >( addr: SocketAddr, log_level_filter: LevelFilter, node: InMemoryNode, - net: NetNamespace, - config_api: ConfigurationApiNamespace, - evm: EvmNamespaceImpl, - zks: ZkMockNamespaceImpl, - hardhat: HardhatNamespaceImpl, - debug: DebugNamespaceImpl, ) -> tokio::task::JoinHandle<()> { let (sender, recv) = oneshot::channel::<()>(); let io_handler = { let mut io = MetaIoHandler::with_middleware(LoggingMiddleware::new(log_level_filter)); + + io.extend_with(NetNamespaceT::to_delegate(node.clone())); + io.extend_with(Web3NamespaceT::to_delegate(node.clone())); + io.extend_with(ConfigurationApiNamespaceT::to_delegate(node.clone())); + io.extend_with(DebugNamespaceT::to_delegate(node.clone())); io.extend_with(EthNamespaceT::to_delegate(node.clone())); - io.extend_with(EthTestNodeNamespaceT::to_delegate(node)); - io.extend_with(net.to_delegate()); - io.extend_with(config_api.to_delegate()); - io.extend_with(evm.to_delegate()); - io.extend_with(zks.to_delegate()); - io.extend_with(hardhat.to_delegate()); - io.extend_with(debug.to_delegate()); + io.extend_with(EthTestNodeNamespaceT::to_delegate(node.clone())); + io.extend_with(EvmNamespaceT::to_delegate(node.clone())); + io.extend_with(HardhatNamespaceT::to_delegate(node.clone())); + io.extend_with(ZksNamespaceT::to_delegate(node)); io }; @@ -340,23 +324,10 @@ async fn main() -> anyhow::Result<()> { tracing::info!(""); } - let net = NetNamespace::new(L2ChainId::from(TEST_NODE_NETWORK_ID)); - let config_api = ConfigurationApiNamespace::new(node.get_inner()); - let evm = EvmNamespaceImpl::new(node.get_inner()); - let zks = ZkMockNamespaceImpl::new(node.get_inner()); - let hardhat = HardhatNamespaceImpl::new(node.get_inner()); - let debug = DebugNamespaceImpl::new(node.get_inner()); - let threads = build_json_http( SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), opt.port), log_level_filter, node, - net, - config_api, - evm, - zks, - hardhat, - debug, ) .await; diff --git a/src/namespaces/config.rs b/src/namespaces/config.rs new file mode 100644 index 00000000..32214b8c --- /dev/null +++ b/src/namespaces/config.rs @@ -0,0 +1,93 @@ +use crate::namespaces::Result; +use crate::observability::LogLevel; +use jsonrpc_derive::rpc; + +#[rpc] +pub trait ConfigurationApiNamespaceT { + /// Get the InMemoryNodeInner's show_calls property as a string + /// + /// # Returns + /// The current `show_calls` value for the InMemoryNodeInner. + #[rpc(name = "config_getShowCalls", returns = "String")] + fn config_get_show_calls(&self) -> Result; + + /// Get the InMemoryNodeInner's current_timestamp property + /// + /// # Returns + /// The current `current_timestamp` value for the InMemoryNodeInner. + #[rpc(name = "config_getCurrentTimestamp", returns = "u64")] + fn config_get_current_timestamp(&self) -> Result; + + /// Set show_calls for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowCalls enum to update show_calls to + /// + /// # Returns + /// The updated/current `show_calls` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowCalls", returns = "String")] + fn config_set_show_calls(&self, value: String) -> Result; + + /// Set show_storage_logs for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowStorageLogs enum to update show_storage_logs to + /// + /// # Returns + /// The updated/current `show_storage_logs` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowStorageLogs", returns = "String")] + fn config_set_show_storage_logs(&self, value: String) -> Result; + + /// Set show_vm_details for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowVMDetails enum to update show_vm_details to + /// + /// # Returns + /// The updated/current `show_vm_details` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowVmDetails", returns = "String")] + fn config_set_show_vm_details(&self, value: String) -> Result; + + /// Set show_gas_details for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A ShowGasDetails enum to update show_gas_details to + /// + /// # Returns + /// The updated/current `show_gas_details` value for the InMemoryNodeInner. + #[rpc(name = "config_setShowGasDetails", returns = "String")] + fn config_set_show_gas_details(&self, value: String) -> Result; + + /// Set resolve_hashes for the InMemoryNodeInner + /// + /// # Parameters + /// - `value`: A bool to update resolve_hashes to + /// + /// # Returns + /// The updated `resolve_hashes` value for the InMemoryNodeInner. + #[rpc(name = "config_setResolveHashes", returns = "bool")] + fn config_set_resolve_hashes(&self, value: bool) -> Result; + + /// Set the logging for the InMemoryNodeInner + /// + /// # Parameters + /// - `level`: The log level to set. One of: ["trace", "debug", "info", "warn", "error"] + /// + /// # Returns + /// `true` if the operation succeeded, `false` otherwise. + #[rpc(name = "config_setLogLevel", returns = "bool")] + fn config_set_log_level(&self, level: LogLevel) -> Result; + + /// Set the logging for the InMemoryNodeInner + /// + /// # Parameters + /// - `level`: The logging directive to set. Example: + /// * "my_crate=debug" + /// * "my_crate::module=trace" + /// * "my_crate=debug,other_crate=warn" + /// + /// # Returns + /// `true` if the operation succeeded, `false` otherwise. + #[rpc(name = "config_setLogging", returns = "bool")] + fn config_set_logging(&self, directive: String) -> Result; +} diff --git a/src/debug.rs b/src/namespaces/debug.rs similarity index 97% rename from src/debug.rs rename to src/namespaces/debug.rs index 1eb162a1..1939ae64 100644 --- a/src/debug.rs +++ b/src/namespaces/debug.rs @@ -5,9 +5,11 @@ use crate::{ }; use itertools::Itertools; use jsonrpc_core::{BoxFuture, Result}; +use multivm::vm_latest::HistoryDisabled; +use multivm::interface::VmInterface; +use multivm::vm_latest::{constants::ETH_CALL_GAS_LIMIT, CallTracer, Vm}; use once_cell::sync::OnceCell; use std::sync::{Arc, RwLock}; -use vm::{constants::ETH_CALL_GAS_LIMIT, CallTracer, HistoryDisabled, TxExecutionMode, Vm}; use zksync_basic_types::H256; use zksync_core::api_server::web3::backend_jsonrpc::{ error::into_jsrpc_error, namespaces::debug::DebugNamespaceT, @@ -169,7 +171,7 @@ impl DebugNamespaceT } }; - let execution_mode = TxExecutionMode::EthCall; + let execution_mode = multivm::interface::TxExecutionMode::EthCall; let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); let bootloader_code = inner.system_contracts.contracts_for_l2_call(); @@ -180,7 +182,7 @@ impl DebugNamespaceT // update the enforced_base_fee within l1_batch_env to match the logic in zksync_core l1_batch_env.enforced_base_fee = Some(l2_tx.common_data.fee.max_fee_per_gas.as_u64()); let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - let mut vm = Vm::new(l1_batch_env, system_env, storage, HistoryDisabled); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(l1_batch_env, system_env, storage); // We must inject *some* signature (otherwise bootloader code fails to generate hash). if l2_tx.common_data.signature.is_empty() { @@ -197,8 +199,11 @@ impl DebugNamespaceT vm.push_transaction(tx); let call_tracer_result = Arc::new(OnceCell::default()); - let tracer = CallTracer::new(call_tracer_result.clone(), HistoryDisabled); - let tx_result = vm.inspect(vec![Box::new(tracer)], vm::VmExecutionMode::OneTx); + let tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + let tx_result = vm.inspect( + tracer.into(), + multivm::interface::VmExecutionMode::OneTx, + ); let call_traces = if only_top { vec![] diff --git a/src/eth_test.rs b/src/namespaces/eth_test.rs similarity index 100% rename from src/eth_test.rs rename to src/namespaces/eth_test.rs diff --git a/src/namespaces/evm.rs b/src/namespaces/evm.rs new file mode 100644 index 00000000..79b95341 --- /dev/null +++ b/src/namespaces/evm.rs @@ -0,0 +1,70 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::U64; + +use crate::namespaces::RpcResult; + +#[rpc] +pub trait EvmNamespaceT { + /// Increase the current timestamp for the node + /// + /// # Parameters + /// - `time_delta`: The number of seconds to increase time by + /// + /// # Returns + /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. + #[rpc(name = "evm_increaseTime")] + fn increase_time(&self, time_delta_seconds: u64) -> RpcResult; + + /// Force a single block to be mined. + /// + /// Will mine an empty block (containing zero transactions) + /// + /// # Returns + /// The string "0x0". + #[rpc(name = "evm_mine")] + fn evm_mine(&self) -> RpcResult; + + /// Set the current timestamp for the node. The timestamp must be in future. + /// + /// # Parameters + /// - `timestamp`: The timestamp to set the time to + /// + /// # Returns + /// The new timestamp value for the InMemoryNodeInner. + #[rpc(name = "evm_setNextBlockTimestamp")] + fn set_next_block_timestamp(&self, timestamp: u64) -> RpcResult; + + /// Set the current timestamp for the node. + /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be + /// mined before old blocks. This will result in an invalid state. + /// + /// # Parameters + /// - `time`: The timestamp to set the time to + /// + /// # Returns + /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. + #[rpc(name = "evm_setTime")] + fn set_time(&self, time: u64) -> RpcResult; + + /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot + /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot + /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same + /// point multiple times. + /// + /// # Returns + /// The `U64` identifier for this snapshot. + #[rpc(name = "evm_snapshot")] + fn snapshot(&self) -> RpcResult; + + /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, + /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots + /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) + /// + /// # Parameters + /// - `snapshot_id`: The snapshot id to revert. + /// + /// # Returns + /// `true` if a snapshot was reverted, otherwise `false`. + #[rpc(name = "evm_revert")] + fn revert_snapshot(&self, snapshot_id: U64) -> RpcResult; +} diff --git a/src/namespaces/hardhat.rs b/src/namespaces/hardhat.rs new file mode 100644 index 00000000..5a69f6b5 --- /dev/null +++ b/src/namespaces/hardhat.rs @@ -0,0 +1,89 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::{Address, U256, U64}; + +use super::RpcResult; + +#[rpc] +pub trait HardhatNamespaceT { + /// Sets the balance of the given address to the given balance. + /// + /// # Arguments + /// + /// * `address` - The `Address` whose balance will be edited + /// * `balance` - The new balance to set for the given address, in wei + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setBalance")] + fn set_balance(&self, address: Address, balance: U256) -> RpcResult; + + /// Modifies an account's nonce by overwriting it. + /// + /// # Arguments + /// + /// * `address` - The `Address` whose nonce is to be changed + /// * `nonce` - The new nonce + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setNonce")] + fn set_nonce(&self, address: Address, balance: U256) -> RpcResult; + + /// Sometimes you may want to advance the latest block number of the network by a large number of blocks. + /// One way to do this would be to call the evm_mine RPC method multiple times, but this is too slow if you want to mine thousands of blocks. + /// The hardhat_mine method can mine any number of blocks at once, in constant time. (It exhibits the same performance no matter how many blocks are mined.) + /// + /// # Arguments + /// + /// * `num_blocks` - The number of blocks to mine, defaults to 1 + /// * `interval` - The interval between the timestamps of each block, in seconds, and it also defaults to 1 + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_mine")] + fn hardhat_mine(&self, num_blocks: Option, interval: Option) -> RpcResult; + + /// Hardhat Network allows you to send transactions impersonating specific account and contract addresses. + /// To impersonate an account use this method, passing the address to impersonate as its parameter. + /// After calling this method, any transactions with this sender will be executed without verification. + /// Multiple addresses can be impersonated at once. + /// + /// # Arguments + /// + /// * `address` - The address to impersonate + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_impersonateAccount")] + fn impersonate_account(&self, address: Address) -> RpcResult; + + /// Use this method to stop impersonating an account after having previously used `hardhat_impersonateAccount` + /// The method returns `true` if the account was being impersonated and `false` otherwise. + /// + /// # Arguments + /// + /// * `address` - The address to stop impersonating. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_stopImpersonatingAccount")] + fn stop_impersonating_account(&self, address: Address) -> RpcResult; + + /// Modifies the bytecode stored at an account's address. + /// + /// # Arguments + /// + /// * `address` - The address where the given code should be stored. + /// * `code` - The code to be stored. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a `bool` representing the success of the operation. + #[rpc(name = "hardhat_setCode")] + fn set_code(&self, address: Address, code: Vec) -> RpcResult<()>; +} diff --git a/src/namespaces/mod.rs b/src/namespaces/mod.rs new file mode 100644 index 00000000..8c359b3e --- /dev/null +++ b/src/namespaces/mod.rs @@ -0,0 +1,21 @@ +mod config; +mod eth_test; +mod evm; +mod hardhat; +mod net; +mod web3; + +use zksync_core::api_server::web3::backend_jsonrpc::namespaces::{debug, eth, zks}; + +pub use config::ConfigurationApiNamespaceT; +pub use debug::DebugNamespaceT; +pub use eth::EthNamespaceT; +pub use eth_test::EthTestNodeNamespaceT; +pub use evm::EvmNamespaceT; +pub use hardhat::HardhatNamespaceT; +pub use net::NetNamespaceT; +pub use web3::Web3NamespaceT; +pub use zks::ZksNamespaceT; + +pub type Result = jsonrpc_core::Result; +pub type RpcResult = jsonrpc_core::BoxFuture>; diff --git a/src/namespaces/net.rs b/src/namespaces/net.rs new file mode 100644 index 00000000..f18aa142 --- /dev/null +++ b/src/namespaces/net.rs @@ -0,0 +1,16 @@ +use jsonrpc_derive::rpc; +use zksync_basic_types::U256; + +use crate::namespaces::Result; + +#[rpc] +pub trait NetNamespaceT { + #[rpc(name = "net_version", returns = "String")] + fn net_version(&self) -> Result; + + #[rpc(name = "net_peerCount", returns = "U256")] + fn net_peer_count(&self) -> Result; + + #[rpc(name = "net_listening", returns = "bool")] + fn net_listening(&self) -> Result; +} diff --git a/src/namespaces/web3.rs b/src/namespaces/web3.rs new file mode 100644 index 00000000..9bfb233c --- /dev/null +++ b/src/namespaces/web3.rs @@ -0,0 +1,9 @@ +use jsonrpc_derive::rpc; + +use crate::namespaces::Result; + +#[rpc] +pub trait Web3NamespaceT { + #[rpc(name = "web3_clientVersion", returns = "String")] + fn web3_client_version(&self) -> Result; +} diff --git a/src/net.rs b/src/net.rs deleted file mode 100644 index 0db92adf..00000000 --- a/src/net.rs +++ /dev/null @@ -1,38 +0,0 @@ -// Built-in uses - -// External uses -use jsonrpc_core::Result; -use jsonrpc_derive::rpc; - -// Workspace uses -use zksync_types::U256; - -// Local uses -use crate::web3::namespaces::NetNamespace; -use crate::node::TEST_NODE_NETWORK_ID; - -#[rpc] -pub trait NetNamespaceT { - #[rpc(name = "net_version", returns = "String")] - fn net_version(&self) -> Result; - - #[rpc(name = "net_peerCount", returns = "U256")] - fn net_peer_count(&self) -> Result; - - #[rpc(name = "net_listening", returns = "bool")] - fn net_listening(&self) -> Result; -} - -impl NetNamespaceT for NetNamespace { - fn net_version(&self) -> Result { - Ok(String::From(TEST_NODE_NETWORK_ID)) - } - - fn net_peer_count(&self) -> Result { - Ok(U256::From(0)) - } - - fn net_listening(&self) -> Result { - Ok(false) - } -} diff --git a/src/node/config.rs b/src/node/config.rs new file mode 100644 index 00000000..81f350ef --- /dev/null +++ b/src/node/config.rs @@ -0,0 +1,189 @@ +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{ConfigurationApiNamespaceT, Result}, + node::InMemoryNode, + observability::LogLevel, +}; + +use super::{ShowCalls, ShowGasDetails, ShowStorageLogs, ShowVMDetails}; + +impl ConfigurationApiNamespaceT + for InMemoryNode +{ + fn config_get_show_calls(&self) -> Result { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_calls.to_string()) + } + + fn config_get_current_timestamp(&self) -> Result { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.current_timestamp) + } + + fn config_set_show_calls(&self, value: String) -> Result { + let show_calls = match value.parse::() { + Ok(value) => value, + Err(_) => return self.config_get_show_calls(), + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_calls = show_calls; + writer.show_calls.to_string() + }) + } + + fn config_set_show_storage_logs(&self, value: String) -> Result { + let show_storage_logs = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_storage_logs.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_storage_logs = show_storage_logs; + writer.show_storage_logs.to_string() + }) + } + + fn config_set_show_vm_details(&self, value: String) -> Result { + let show_vm_details = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_vm_details.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_vm_details = show_vm_details; + writer.show_vm_details.to_string() + }) + } + + fn config_set_show_gas_details(&self, value: String) -> Result { + let show_gas_details = match value.parse::() { + Ok(value) => value, + Err(_) => { + return self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|reader| reader.show_gas_details.to_string()) + } + }; + + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.show_gas_details = show_gas_details; + writer.show_gas_details.to_string() + }) + } + + fn config_set_resolve_hashes(&self, value: bool) -> Result { + self.get_inner() + .write() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .map(|mut writer| { + writer.resolve_hashes = value; + writer.resolve_hashes + }) + } + + fn config_set_log_level(&self, level: LogLevel) -> Result { + if let Some(observability) = &self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + })? + .observability + { + match observability.set_log_level(level.clone()) { + Ok(_) => tracing::info!("set log level to '{}'", level), + Err(err) => { + tracing::error!("failed setting log level {:?}", err); + return Ok(false); + } + } + } + Ok(true) + } + + fn config_set_logging(&self, directive: String) -> Result { + if let Some(observability) = &self + .get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + })? + .observability + { + match observability.set_logging(&directive) { + Ok(_) => tracing::info!("set logging to '{}'", directive), + Err(err) => { + tracing::error!("failed setting logging to '{}': {:?}", directive, err); + return Ok(false); + } + } + } + Ok(true) + } +} diff --git a/src/node/debug.rs b/src/node/debug.rs new file mode 100644 index 00000000..bccb3830 --- /dev/null +++ b/src/node/debug.rs @@ -0,0 +1,564 @@ +use itertools::Itertools; +use once_cell::sync::OnceCell; +use std::sync::Arc; + +use multivm::interface::VmInterface; +use multivm::tracers::CallTracer; +use multivm::vm_latest::HistoryDisabled; +use multivm::vm_latest::{constants::ETH_CALL_GAS_LIMIT, ToTracerPointer, Vm}; + +use zksync_basic_types::H256; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::StorageView; +use zksync_types::{ + api::{BlockId, BlockNumber, DebugCall, ResultDebugCall, TracerConfig, TransactionVariant}, + l2::L2Tx, + transaction_request::CallRequest, + PackedEthSignature, Transaction, U64, +}; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{DebugNamespaceT, Result, RpcResult}, + node::{InMemoryNode, MAX_TX_SIZE}, + utils::{create_debug_output, to_real_block_number}, +}; + +impl DebugNamespaceT + for InMemoryNode +{ + fn trace_block_by_number( + &self, + block: BlockNumber, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let block = { + let number = + to_real_block_number(block, U64::from(inner.current_miniblock)).as_u64(); + + inner + .block_hashes + .get(&number) + .and_then(|hash| inner.blocks.get(hash)) + .ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Block not found".to_string(), + vec![], + )) + })? + }; + + let tx_hashes = block + .transactions + .iter() + .map(|tx| match tx { + TransactionVariant::Full(tx) => tx.hash, + TransactionVariant::Hash(hash) => *hash, + }) + .collect_vec(); + + let debug_calls = tx_hashes + .into_iter() + .map(|tx_hash| { + let tx = inner.tx_results.get(&tx_hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Transaction not found".to_string(), + vec![], + )) + })?; + Ok(tx.debug_info(only_top)) + }) + .collect::>>()? + .into_iter() + .map(|result| ResultDebugCall { result }) + .collect_vec(); + + Ok(debug_calls) + }) + } + + fn trace_block_by_hash( + &self, + hash: H256, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let block = inner.blocks.get(&hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Block not found".to_string(), + vec![], + )) + })?; + + let tx_hashes = block + .transactions + .iter() + .map(|tx| match tx { + TransactionVariant::Full(tx) => tx.hash, + TransactionVariant::Hash(hash) => *hash, + }) + .collect_vec(); + + let debug_calls = tx_hashes + .into_iter() + .map(|tx_hash| { + let tx = inner.tx_results.get(&tx_hash).ok_or_else(|| { + into_jsrpc_error(Web3Error::SubmitTransactionError( + "Transaction not found".to_string(), + vec![], + )) + })?; + Ok(tx.debug_info(only_top)) + }) + .collect::>>()? + .into_iter() + .map(|result| ResultDebugCall { result }) + .collect_vec(); + + Ok(debug_calls) + }) + } + + /// Trace execution of a transaction. + fn trace_call( + &self, + request: CallRequest, + block: Option, + options: Option, + ) -> RpcResult { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + if block.is_some() && !matches!(block, Some(BlockId::Number(BlockNumber::Latest))) { + return Err(jsonrpc_core::Error::invalid_params( + "tracing only supported at `latest` block", + )); + } + + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let mut l2_tx = match L2Tx::from_request(request.into(), MAX_TX_SIZE) { + Ok(tx) => tx, + Err(e) => { + let error = Web3Error::SerializationError(e); + return Err(into_jsrpc_error(error)); + } + }; + + let execution_mode = multivm::interface::TxExecutionMode::EthCall; + let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); + + let bootloader_code = inner.system_contracts.contracts_for_l2_call(); + + // init vm + let (mut l1_batch_env, _block_context) = inner.create_l1_batch_env(storage.clone()); + + // update the enforced_base_fee within l1_batch_env to match the logic in zksync_core + l1_batch_env.enforced_base_fee = Some(l2_tx.common_data.fee.max_fee_per_gas.as_u64()); + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(l1_batch_env, system_env, storage); + + // We must inject *some* signature (otherwise bootloader code fails to generate hash). + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = + PackedEthSignature::default().serialize_packed().into(); + } + + // Match behavior of zksync_core: + // Protection against infinite-loop eth_calls and alike: + // limiting the amount of gas the call can use. + l2_tx.common_data.fee.gas_limit = ETH_CALL_GAS_LIMIT.into(); + + let tx: Transaction = l2_tx.clone().into(); + vm.push_transaction(tx); + + let call_tracer_result = Arc::new(OnceCell::default()); + let tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + let tx_result = vm.inspect(tracer.into(), multivm::interface::VmExecutionMode::OneTx); + + let call_traces = if only_top { + vec![] + } else { + Arc::try_unwrap(call_tracer_result) + .unwrap() + .take() + .unwrap_or_default() + }; + + let debug = + create_debug_output(&l2_tx, &tx_result, call_traces).map_err(into_jsrpc_error)?; + + Ok(debug) + }) + } + + fn trace_transaction( + &self, + tx_hash: H256, + options: Option, + ) -> RpcResult> { + let only_top = options.is_some_and(|o| o.tracer_config.only_top_call); + let inner = self.get_inner().clone(); + Box::pin(async move { + let inner = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + Ok(inner + .tx_results + .get(&tx_hash) + .map(|tx| tx.debug_info(only_top))) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{ + deps::system_contracts::bytecode_from_slice, + http_fork_source::HttpForkSource, + node::{InMemoryNode, TransactionResult}, + testing::{self, LogBuilder}, + }; + use ethers::abi::{short_signature, AbiEncode, HumanReadableParser, ParamType, Token}; + use zksync_basic_types::{Address, Nonce, H160, U256}; + use zksync_types::{ + api::{Block, CallTracerConfig, SupportedTracers, TransactionReceipt}, + transaction_request::CallRequestBuilder, + utils::deployed_address_create, + }; + + fn deploy_test_contracts(node: &InMemoryNode) -> (Address, Address) { + let private_key = H256::repeat_byte(0xee); + let from_account = zksync_types::PackedEthSignature::address_from_private_key(&private_key) + .expect("failed generating address"); + node.set_rich_account(from_account); + + // first, deploy secondary contract + let secondary_bytecode = bytecode_from_slice( + "Secondary", + include_bytes!("../deps/test-contracts/Secondary.json"), + ); + let secondary_deployed_address = deployed_address_create(from_account, U256::zero()); + testing::deploy_contract( + node, + H256::repeat_byte(0x1), + private_key, + secondary_bytecode, + Some((U256::from(2),).encode()), + Nonce(0), + ); + + // deploy primary contract using the secondary contract address as a constructor parameter + let primary_bytecode = bytecode_from_slice( + "Primary", + include_bytes!("../deps/test-contracts/Primary.json"), + ); + let primary_deployed_address = deployed_address_create(from_account, U256::one()); + testing::deploy_contract( + node, + H256::repeat_byte(0x1), + private_key, + primary_bytecode, + Some((secondary_deployed_address).encode()), + Nonce(1), + ); + (primary_deployed_address, secondary_deployed_address) + } + + #[tokio::test] + async fn test_trace_deployed_contract() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, secondary_deployed_address) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let func = HumanReadableParser::parse_function("calculate(uint)").unwrap(); + let calldata = func.encode_input(&[Token::Uint(U256::from(42))]).unwrap(); + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(calldata.clone().into()) + .gas(80_000_000.into()) + .build(); + let trace = node + .trace_call(request.clone(), None, None) + .await + .expect("trace call"); + + // call should not revert + assert!(trace.error.is_none()); + assert!(trace.revert_reason.is_none()); + + // check that the call was successful + let output = + ethers::abi::decode(&[ParamType::Uint(256)], trace.output.0.as_slice()).unwrap(); + assert_eq!(output[0], Token::Uint(U256::from(84))); + + // find the call to primary contract in the trace + let contract_call = trace + .calls + .first() + .unwrap() + .calls + .last() + .unwrap() + .calls + .first() + .unwrap(); + + assert_eq!(contract_call.to, primary_deployed_address); + assert_eq!(contract_call.input, calldata.into()); + + // check that it contains a call to secondary contract + let subcall = contract_call.calls.first().unwrap(); + assert_eq!(subcall.to, secondary_deployed_address); + assert_eq!(subcall.from, primary_deployed_address); + assert_eq!(subcall.output, U256::from(84).encode().into()); + } + + #[tokio::test] + async fn test_trace_only_top() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, _) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let func = HumanReadableParser::parse_function("calculate(uint)").unwrap(); + let calldata = func.encode_input(&[Token::Uint(U256::from(42))]).unwrap(); + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(calldata.into()) + .gas(80_000_000.into()) + .build(); + + // if we trace with onlyTopCall=true, we should get only the top-level call + let trace = node + .trace_call( + request, + None, + Some(TracerConfig { + tracer: SupportedTracers::CallTracer, + tracer_config: CallTracerConfig { + only_top_call: true, + }, + }), + ) + .await + .expect("trace call"); + // call should not revert + assert!(trace.error.is_none()); + assert!(trace.revert_reason.is_none()); + + // call should not contain any subcalls + assert!(trace.calls.is_empty()); + } + + #[tokio::test] + async fn test_trace_reverts() { + let node = InMemoryNode::::default(); + + let (primary_deployed_address, _) = deploy_test_contracts(&node); + + // trace a call to the primary contract + let request = CallRequestBuilder::default() + .to(primary_deployed_address) + .data(short_signature("shouldRevert()", &[]).into()) + .gas(80_000_000.into()) + .build(); + let trace = node + .trace_call(request, None, None) + .await + .expect("trace call"); + + // call should revert + assert!(trace.revert_reason.is_some()); + + // find the call to primary contract in the trace + let contract_call = trace + .calls + .first() + .unwrap() + .calls + .last() + .unwrap() + .calls + .first() + .unwrap(); + + // the contract subcall should have reverted + assert!(contract_call.revert_reason.is_some()); + } + + #[tokio::test] + async fn test_trace_transaction() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + writer.tx_results.insert( + H256::repeat_byte(0x1), + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt { + logs: vec![LogBuilder::new() + .set_address(H160::repeat_byte(0xa1)) + .build()], + ..Default::default() + }, + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_transaction(H256::repeat_byte(0x1), None) + .await + .unwrap() + .unwrap(); + assert_eq!(result.calls.len(), 1); + } + + #[tokio::test] + async fn test_trace_transaction_only_top() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + writer.tx_results.insert( + H256::repeat_byte(0x1), + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt { + logs: vec![LogBuilder::new() + .set_address(H160::repeat_byte(0xa1)) + .build()], + ..Default::default() + }, + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_transaction( + H256::repeat_byte(0x1), + Some(TracerConfig { + tracer: SupportedTracers::CallTracer, + tracer_config: CallTracerConfig { + only_top_call: true, + }, + }), + ) + .await + .unwrap() + .unwrap(); + assert!(result.calls.is_empty()); + } + + #[tokio::test] + async fn test_trace_transaction_not_found() { + let node = InMemoryNode::::default(); + let result = node + .trace_transaction(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert!(result.is_none()); + } + + #[tokio::test] + async fn test_trace_block_by_hash_empty() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let block = Block::::default(); + writer.blocks.insert(H256::repeat_byte(0x1), block); + } + let result = node + .trace_block_by_hash(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert_eq!(result.len(), 0); + } + + #[tokio::test] + async fn test_trace_block_by_hash() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let tx = zksync_types::api::Transaction::default(); + let tx_hash = tx.hash; + let mut block = Block::::default(); + block.transactions.push(TransactionVariant::Full(tx)); + writer.blocks.insert(H256::repeat_byte(0x1), block); + writer.tx_results.insert( + tx_hash, + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt::default(), + debug: testing::default_tx_debug_info(), + }, + ); + } + let result = node + .trace_block_by_hash(H256::repeat_byte(0x1), None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + } + + #[tokio::test] + async fn test_trace_block_by_number() { + let node = InMemoryNode::::default(); + let inner = node.get_inner(); + { + let mut writer = inner.write().unwrap(); + let tx = zksync_types::api::Transaction::default(); + let tx_hash = tx.hash; + let mut block = Block::::default(); + block.transactions.push(TransactionVariant::Full(tx)); + writer.blocks.insert(H256::repeat_byte(0x1), block); + writer.block_hashes.insert(0, H256::repeat_byte(0x1)); + writer.tx_results.insert( + tx_hash, + TransactionResult { + info: testing::default_tx_execution_info(), + receipt: TransactionReceipt::default(), + debug: testing::default_tx_debug_info(), + }, + ); + } + // check `latest` alias + let result = node + .trace_block_by_number(BlockNumber::Latest, None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + + // check block number + let result = node + .trace_block_by_number(BlockNumber::Number(0.into()), None) + .await + .unwrap(); + assert_eq!(result.len(), 1); + assert_eq!(result[0].result.calls.len(), 1); + } +} diff --git a/src/node.rs b/src/node/eth.rs similarity index 59% rename from src/node.rs rename to src/node/eth.rs index fe13acbc..dcd04006 100644 --- a/src/node.rs +++ b/src/node/eth.rs @@ -1,1649 +1,42 @@ -//! In-memory node, that supports forking other networks. -use crate::{ - bootloader_debug::{BootloaderDebug, BootloaderDebugTracer}, - console_log::ConsoleLogHandler, - deps::InMemoryStorage, - filters::{EthFilters, FilterType, LogFilter}, - fork::{ForkDetails, ForkSource, ForkStorage}, - formatter, - observability::Observability, - system_contracts::{self, SystemContracts}, - utils::{ - self, adjust_l1_gas_price_for_tx, bytecode_to_factory_dep, create_debug_output, - not_implemented, to_human_size, IntoBoxedFuture, - }, -}; -use clap::Parser; +use std::collections::HashSet; + use colored::Colorize; -use core::fmt::Display; use futures::FutureExt; -use indexmap::IndexMap; use itertools::Itertools; -use jsonrpc_core::BoxFuture; -use once_cell::sync::OnceCell; -use std::{ - cmp::{self}, - collections::{HashMap, HashSet}, - str::FromStr, - sync::{Arc, RwLock}, -}; - -use crate::eth_test::EthTestNodeNamespaceT; -use vm::{ - constants::{ - BLOCK_GAS_LIMIT, BLOCK_OVERHEAD_PUBDATA, ETH_CALL_GAS_LIMIT, MAX_PUBDATA_PER_BLOCK, - }, - utils::{ - fee::derive_base_fee_and_gas_per_pubdata, - l2_blocks::load_last_l2_block, - overhead::{derive_overhead, OverheadCoeficients}, - }, - CallTracer, ExecutionResult, HistoryDisabled, L1BatchEnv, SystemEnv, TxExecutionMode, Vm, - VmExecutionResultAndLogs, VmTracer, -}; -use zksync_basic_types::{ - web3::{self, signing::keccak256}, - AccountTreeId, Address, Bytes, L1BatchNumber, MiniblockNumber, H160, H256, U256, U64, -}; -use zksync_contracts::BaseSystemContracts; -use zksync_core::api_server::web3::backend_jsonrpc::{ - error::into_jsrpc_error, namespaces::eth::EthNamespaceT, -}; -use zksync_state::{ReadStorage, StoragePtr, StorageView, WriteStorage}; -use zksync_types::vm_trace::Call; +use multivm::interface::{ExecutionResult, TxExecutionMode}; +use multivm::vm_latest::constants::ETH_CALL_GAS_LIMIT; +use zksync_basic_types::{web3, AccountTreeId, Address, Bytes, H160, H256, U256, U64}; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::ReadStorage; use zksync_types::{ - api::{Block, DebugCall, Log, TransactionReceipt, TransactionVariant}, - block::legacy_miniblock_hash, + api::{Block, BlockIdVariant, BlockNumber, TransactionVariant}, fee::Fee, get_code_key, get_nonce_key, l2::L2Tx, transaction_request::TransactionRequest, - utils::{ - decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance, - storage_key_for_standard_token_balance, - }, - PackedEthSignature, StorageKey, StorageLogQueryType, StorageValue, Transaction, - ACCOUNT_CODE_STORAGE_ADDRESS, EIP_712_TX_TYPE, L2_ETH_TOKEN_ADDRESS, MAX_GAS_PER_PUBDATA_BYTE, - MAX_L2_TX_GAS_LIMIT, -}; -use zksync_utils::{ - bytecode::{compress_bytecode, hash_bytecode}, - h256_to_account_address, h256_to_u256, h256_to_u64, u256_to_h256, + utils::storage_key_for_standard_token_balance, + PackedEthSignature, StorageKey, L2_ETH_TOKEN_ADDRESS, }; +use zksync_utils::{h256_to_u256, u256_to_h256}; use zksync_web3_decl::{ error::Web3Error, - types::{FeeHistory, Filter, FilterChanges}, + types::{FeeHistory, Filter, FilterChanges, SyncState}, }; -/// Max possible size of an ABI encoded tx (in bytes). -pub const MAX_TX_SIZE: usize = 1_000_000; -/// Timestamp of the first block (if not running in fork mode). -pub const NON_FORK_FIRST_BLOCK_TIMESTAMP: u64 = 1_000; -/// Network ID we use for the test node. -pub const TEST_NODE_NETWORK_ID: u32 = 260; -/// L1 Gas Price. -pub const L1_GAS_PRICE: u64 = 50_000_000_000; -/// L2 Gas Price (0.25 gwei). -pub const L2_GAS_PRICE: u64 = 250_000_000; -/// L1 Gas Price Scale Factor for gas estimation. -pub const ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR: f64 = 1.2; -/// The max possible number of gas that `eth_estimateGas` is allowed to overestimate. -pub const ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD: u32 = 100; -/// Acceptable gas overestimation limit. -pub const ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION: u32 = 1_000; -/// The factor by which to scale the gasLimit. -pub const ESTIMATE_GAS_SCALE_FACTOR: f32 = 1.3; -/// The maximum number of previous blocks to store the state for. -pub const MAX_PREVIOUS_STATES: u16 = 128; -/// The zks protocol version. -pub const PROTOCOL_VERSION: &str = "zks/1"; - -pub fn compute_hash(block_number: u64, tx_hash: H256) -> H256 { - let digest = [&block_number.to_be_bytes()[..], tx_hash.as_bytes()].concat(); - H256(keccak256(&digest)) -} - -pub fn create_empty_block(block_number: u64, timestamp: u64, batch: u32) -> Block { - let hash = compute_hash(block_number, H256::zero()); - Block { - hash, - number: U64::from(block_number), - timestamp: U256::from(timestamp), - l1_batch_number: Some(U64::from(batch)), - transactions: vec![], - gas_used: U256::from(0), - gas_limit: U256::from(BLOCK_GAS_LIMIT), - ..Default::default() - } -} - -/// Information about the executed transaction. -#[derive(Debug, Clone)] -pub struct TxExecutionInfo { - pub tx: L2Tx, - // Batch number where transaction was executed. - pub batch_number: u32, - pub miniblock_number: u64, - pub result: VmExecutionResultAndLogs, -} - -#[derive(Debug, Default, clap::Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowCalls { - #[default] - None, - User, - System, - All, -} - -impl FromStr for ShowCalls { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowCalls::None), - "user" => Ok(ShowCalls::User), - "system" => Ok(ShowCalls::System), - "all" => Ok(ShowCalls::All), - _ => Err(format!( - "Unknown ShowCalls value {} - expected one of none|user|system|all.", - s - )), - } - } -} - -impl Display for ShowCalls { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowStorageLogs { - #[default] - None, - Read, - Write, - All, -} - -impl FromStr for ShowStorageLogs { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowStorageLogs::None), - "read" => Ok(ShowStorageLogs::Read), - "write" => Ok(ShowStorageLogs::Write), - "all" => Ok(ShowStorageLogs::All), - _ => Err(format!( - "Unknown ShowStorageLogs value {} - expected one of none|read|write|all.", - s - )), - } - } -} - -impl Display for ShowStorageLogs { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowVMDetails { - #[default] - None, - All, -} - -impl FromStr for ShowVMDetails { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowVMDetails::None), - "all" => Ok(ShowVMDetails::All), - _ => Err(format!( - "Unknown ShowVMDetails value {} - expected one of none|all.", - s - )), - } - } -} - -impl Display for ShowVMDetails { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum ShowGasDetails { - #[default] - None, - All, -} - -impl FromStr for ShowGasDetails { - type Err = String; - - fn from_str(s: &str) -> Result { - match s.to_lowercase().as_ref() { - "none" => Ok(ShowGasDetails::None), - "all" => Ok(ShowGasDetails::All), - _ => Err(format!( - "Unknown ShowGasDetails value {} - expected one of none|all.", - s - )), - } - } -} - -impl Display for ShowGasDetails { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - write!(f, "{:?}", self) - } -} - -#[derive(Debug, Clone)] -pub struct TransactionResult { - pub info: TxExecutionInfo, - pub receipt: TransactionReceipt, - pub debug: DebugCall, -} - -impl TransactionResult { - /// Returns the debug information for the transaction. - /// If `only_top` is true - will only return the top level call. - pub fn debug_info(&self, only_top: bool) -> DebugCall { - let calls = if only_top { - vec![] - } else { - self.debug.calls.clone() - }; - DebugCall { - calls, - ..self.debug.clone() - } - } -} - -/// Helper struct for InMemoryNode. -/// S - is the Source of the Fork. -#[derive(Clone)] -pub struct InMemoryNodeInner { - /// The latest timestamp that was already generated. - /// Next block will be current_timestamp + 1 - pub current_timestamp: u64, - /// The latest batch number that was already generated. - /// Next block will be current_batch + 1 - pub current_batch: u32, - /// The latest miniblock number that was already generated. - /// Next transaction will go to the block current_miniblock + 1 - pub current_miniblock: u64, - /// The latest miniblock hash. - pub current_miniblock_hash: H256, - pub l1_gas_price: u64, - // Map from transaction to details about the exeuction - pub tx_results: HashMap, - // Map from block hash to information about the block. - pub blocks: HashMap>, - // Map from block number to a block hash. - pub block_hashes: HashMap, - // Map from filter_id to the eth filter - pub filters: EthFilters, - // Underlying storage - pub fork_storage: ForkStorage, - // Debug level information. - pub show_calls: ShowCalls, - // Displays storage logs. - pub show_storage_logs: ShowStorageLogs, - // Displays VM details. - pub show_vm_details: ShowVMDetails, - // Gas details information. - pub show_gas_details: ShowGasDetails, - // If true - will contact openchain to resolve the ABI to function names. - pub resolve_hashes: bool, - pub console_log_handler: ConsoleLogHandler, - pub system_contracts: SystemContracts, - pub impersonated_accounts: HashSet
, - pub rich_accounts: HashSet, - /// Keeps track of historical states indexed via block hash. Limited to [MAX_PREVIOUS_STATES]. - pub previous_states: IndexMap>, - /// An optional handle to the observability stack - pub observability: Option, -} - -type L2TxResult = ( - HashMap, - VmExecutionResultAndLogs, - Vec, - Block, - HashMap>, - BlockContext, -); - -impl InMemoryNodeInner { - pub fn create_l1_batch_env( - &self, - storage: StoragePtr, - ) -> (L1BatchEnv, BlockContext) { - let last_l2_block_hash = if let Some(last_l2_block) = load_last_l2_block(storage) { - last_l2_block.hash - } else { - // This is the scenario of either the first L2 block ever or - // the first block after the upgrade for support of L2 blocks. - legacy_miniblock_hash(MiniblockNumber(self.current_miniblock as u32)) - }; - let block_ctx = BlockContext::from_current( - self.current_batch, - self.current_miniblock, - self.current_timestamp, - ); - let block_ctx = block_ctx.new_batch(); - let batch_env = L1BatchEnv { - // TODO: set the previous batch hash properly (take from fork, when forking, and from local storage, when this is not the first block). - previous_batch_hash: None, - number: L1BatchNumber::from(block_ctx.batch), - timestamp: block_ctx.timestamp, - l1_gas_price: self.l1_gas_price, - fair_l2_gas_price: L2_GAS_PRICE, - fee_account: H160::zero(), - enforced_base_fee: None, - first_l2_block: vm::L2BlockEnv { - // the 'current_miniblock' contains the block that was already produced. - // So the next one should be one higher. - number: block_ctx.miniblock as u32, - timestamp: block_ctx.timestamp, - prev_block_hash: last_l2_block_hash, - // This is only used during zksyncEra block timestamp/number transition. - // In case of starting a new network, it doesn't matter. - // In theory , when forking mainnet, we should match this value - // to the value that was set in the node at that time - but AFAIK - // we don't have any API for this - so this might result in slightly - // incorrect replays of transacions during the migration period, that - // depend on block number or timestamp. - max_virtual_blocks_to_create: 1, - }, - }; - - (batch_env, block_ctx) - } - - pub fn create_system_env( - &self, - base_system_contracts: BaseSystemContracts, - execution_mode: TxExecutionMode, - ) -> SystemEnv { - SystemEnv { - zk_porter_available: false, - // TODO: when forking, we could consider taking the protocol version id from the fork itself. - version: zksync_types::ProtocolVersionId::latest(), - base_system_smart_contracts: base_system_contracts, - gas_limit: BLOCK_GAS_LIMIT, - execution_mode, - default_validation_computational_gas_limit: BLOCK_GAS_LIMIT, - chain_id: self.fork_storage.chain_id, - } - } - - /// Estimates the gas required for a given call request. - /// - /// # Arguments - /// - /// * `req` - A `CallRequest` struct representing the call request to estimate gas for. - /// - /// # Returns - /// - /// A `Result` with a `Fee` representing the estimated gas related data. - pub fn estimate_gas_impl( - &self, - req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::Result { - let mut l2_tx = match L2Tx::from_request(req.into(), MAX_TX_SIZE) { - Ok(tx) => tx, - Err(e) => { - let error = Web3Error::SerializationError(e); - return Err(into_jsrpc_error(error)); - } - }; - - let tx: Transaction = l2_tx.clone().into(); - let fair_l2_gas_price = L2_GAS_PRICE; - - // Calculate Adjusted L1 Price - let l1_gas_price = { - let current_l1_gas_price = - ((self.l1_gas_price as f64) * ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR) as u64; - - // In order for execution to pass smoothly, we need to ensure that block's required gasPerPubdata will be - // <= to the one in the transaction itself. - adjust_l1_gas_price_for_tx( - current_l1_gas_price, - L2_GAS_PRICE, - tx.gas_per_pubdata_byte_limit(), - ) - }; - - let (base_fee, gas_per_pubdata_byte) = - derive_base_fee_and_gas_per_pubdata(l1_gas_price, fair_l2_gas_price); - - // Properly format signature - if l2_tx.common_data.signature.is_empty() { - l2_tx.common_data.signature = vec![0u8; 65]; - l2_tx.common_data.signature[64] = 27; - } - - l2_tx.common_data.fee.gas_per_pubdata_limit = MAX_GAS_PER_PUBDATA_BYTE.into(); - l2_tx.common_data.fee.max_fee_per_gas = base_fee.into(); - l2_tx.common_data.fee.max_priority_fee_per_gas = base_fee.into(); - - let mut storage_view = StorageView::new(&self.fork_storage); - - // Calculate gas_for_bytecodes_pubdata - let pubdata_for_factory_deps = l2_tx - .execute - .factory_deps - .as_deref() - .unwrap_or_default() - .iter() - .map(|bytecode| { - if storage_view.is_bytecode_known(&hash_bytecode(bytecode)) { - return 0; - } - - let length = if let Ok(compressed) = compress_bytecode(bytecode) { - compressed.len() - } else { - bytecode.len() - }; - length as u32 + ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD - }) - .sum::(); - - if pubdata_for_factory_deps > MAX_PUBDATA_PER_BLOCK { - return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - "exceeds limit for published pubdata".into(), - Default::default(), - ))); - } - - let gas_for_bytecodes_pubdata: u32 = - pubdata_for_factory_deps * (gas_per_pubdata_byte as u32); - - let storage = storage_view.to_rc_ptr(); - - let execution_mode = TxExecutionMode::EstimateFee; - let (mut batch_env, _) = self.create_l1_batch_env(storage.clone()); - batch_env.l1_gas_price = l1_gas_price; - let impersonating = self - .impersonated_accounts - .contains(&l2_tx.common_data.initiator_address); - let system_env = self.create_system_env( - self.system_contracts - .contracts_for_fee_estimate(impersonating) - .clone(), - execution_mode, - ); - - // We are using binary search to find the minimal values of gas_limit under which the transaction succeeds - let mut lower_bound = 0; - let mut upper_bound = MAX_L2_TX_GAS_LIMIT as u32; - let mut attempt_count = 1; - - tracing::trace!("Starting gas estimation loop"); - while lower_bound + ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION < upper_bound { - let mid = (lower_bound + upper_bound) / 2; - tracing::trace!( - "Attempt {} (lower_bound: {}, upper_bound: {}, mid: {})", - attempt_count, - lower_bound, - upper_bound, - mid - ); - let try_gas_limit = gas_for_bytecodes_pubdata + mid; - - let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( - l2_tx.clone(), - gas_per_pubdata_byte, - try_gas_limit, - l1_gas_price, - batch_env.clone(), - system_env.clone(), - &self.fork_storage, - ); - - if estimate_gas_result.result.is_failed() { - tracing::trace!("Attempt {} FAILED", attempt_count); - lower_bound = mid + 1; - } else { - tracing::trace!("Attempt {} SUCCEEDED", attempt_count); - upper_bound = mid; - } - attempt_count += 1; - } - - tracing::trace!("Gas Estimation Values:"); - tracing::trace!(" Final upper_bound: {}", upper_bound); - tracing::trace!(" ESTIMATE_GAS_SCALE_FACTOR: {}", ESTIMATE_GAS_SCALE_FACTOR); - tracing::trace!(" MAX_L2_TX_GAS_LIMIT: {}", MAX_L2_TX_GAS_LIMIT); - let tx_body_gas_limit = cmp::min( - MAX_L2_TX_GAS_LIMIT as u32, - (upper_bound as f32 * ESTIMATE_GAS_SCALE_FACTOR) as u32, - ); - let suggested_gas_limit = tx_body_gas_limit + gas_for_bytecodes_pubdata; - - let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( - l2_tx.clone(), - gas_per_pubdata_byte, - suggested_gas_limit, - l1_gas_price, - batch_env, - system_env, - &self.fork_storage, - ); - - let coefficients = OverheadCoeficients::from_tx_type(EIP_712_TX_TYPE); - let overhead: u32 = derive_overhead( - suggested_gas_limit, - gas_per_pubdata_byte as u32, - tx.encoding_len(), - coefficients, - ); - - match estimate_gas_result.result { - ExecutionResult::Revert { output } => { - tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - let message = output.to_string(); - let pretty_message = format!( - "execution reverted{}{}", - if message.is_empty() { "" } else { ": " }, - message - ); - let data = output.encoded_data(); - tracing::info!("{}", pretty_message.on_red()); - Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - pretty_message, - data, - ))) - } - ExecutionResult::Halt { reason } => { - tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - let message = reason.to_string(); - let pretty_message = format!( - "execution reverted{}{}", - if message.is_empty() { "" } else { ": " }, - message - ); - - tracing::info!("{}", pretty_message.on_red()); - Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - pretty_message, - vec![], - ))) - } - ExecutionResult::Success { .. } => { - let full_gas_limit = match tx_body_gas_limit - .overflowing_add(gas_for_bytecodes_pubdata + overhead) - { - (value, false) => value, - (_, true) => { - tracing::info!("{}", "Overflow when calculating gas estimation. We've exceeded the block gas limit by summing the following values:".red()); - tracing::info!( - "{}", - format!( - "\tEstimated transaction body gas cost: {}", - tx_body_gas_limit - ) - .red() - ); - tracing::info!( - "{}", - format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() - ); - tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); - return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( - "exceeds block gas limit".into(), - Default::default(), - ))); - } - }; - - tracing::trace!("Gas Estimation Results"); - tracing::trace!(" tx_body_gas_limit: {}", tx_body_gas_limit); - tracing::trace!(" gas_for_bytecodes_pubdata: {}", gas_for_bytecodes_pubdata); - tracing::trace!(" overhead: {}", overhead); - tracing::trace!(" full_gas_limit: {}", full_gas_limit); - let fee = Fee { - max_fee_per_gas: base_fee.into(), - max_priority_fee_per_gas: 0u32.into(), - gas_limit: full_gas_limit.into(), - gas_per_pubdata_limit: gas_per_pubdata_byte.into(), - }; - Ok(fee) - } - } - } - - /// Runs fee estimation against a sandbox vm with the given gas_limit. - #[allow(clippy::too_many_arguments)] - fn estimate_gas_step( - mut l2_tx: L2Tx, - gas_per_pubdata_byte: u64, - tx_gas_limit: u32, - l1_gas_price: u64, - mut batch_env: L1BatchEnv, - system_env: SystemEnv, - fork_storage: &ForkStorage, - ) -> VmExecutionResultAndLogs { - let tx: Transaction = l2_tx.clone().into(); - let l1_gas_price = - adjust_l1_gas_price_for_tx(l1_gas_price, L2_GAS_PRICE, tx.gas_per_pubdata_byte_limit()); - - let coefficients = OverheadCoeficients::from_tx_type(EIP_712_TX_TYPE); - // Set gas_limit for transaction - let gas_limit_with_overhead = tx_gas_limit - + derive_overhead( - tx_gas_limit, - gas_per_pubdata_byte as u32, - tx.encoding_len(), - coefficients, - ); - l2_tx.common_data.fee.gas_limit = gas_limit_with_overhead.into(); - - let storage = StorageView::new(fork_storage).to_rc_ptr(); - - // The nonce needs to be updated - let nonce = l2_tx.nonce(); - let nonce_key = get_nonce_key(&l2_tx.initiator_account()); - let full_nonce = storage.borrow_mut().read_value(&nonce_key); - let (_, deployment_nonce) = decompose_full_nonce(h256_to_u256(full_nonce)); - let enforced_full_nonce = nonces_to_full_nonce(U256::from(nonce.0), deployment_nonce); - storage - .borrow_mut() - .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); - - // We need to explicitly put enough balance into the account of the users - let payer = l2_tx.payer(); - let balance_key = storage_key_for_eth_balance(&payer); - let mut current_balance = h256_to_u256(storage.borrow_mut().read_value(&balance_key)); - let added_balance = l2_tx.common_data.fee.gas_limit * l2_tx.common_data.fee.max_fee_per_gas; - current_balance += added_balance; - storage - .borrow_mut() - .set_value(balance_key, u256_to_h256(current_balance)); - - batch_env.l1_gas_price = l1_gas_price; - - let mut vm = Vm::new(batch_env, system_env, storage, HistoryDisabled); - - let tx: Transaction = l2_tx.into(); - vm.push_transaction(tx); - - vm.execute(vm::VmExecutionMode::OneTx) - } - - /// Sets the `impersonated_account` field of the node. - /// This field is used to override the `tx.initiator_account` field of the transaction in the `run_l2_tx` method. - pub fn set_impersonated_account(&mut self, address: Address) -> bool { - self.impersonated_accounts.insert(address) - } - - /// Clears the `impersonated_account` field of the node. - pub fn stop_impersonating_account(&mut self, address: Address) -> bool { - self.impersonated_accounts.remove(&address) - } - - /// Archives the current state for later queries. - pub fn archive_state(&mut self) -> Result<(), String> { - if self.previous_states.len() > MAX_PREVIOUS_STATES as usize { - if let Some(entry) = self.previous_states.shift_remove_index(0) { - tracing::debug!("removing archived state for previous block {:#x}", entry.0); - } - } - tracing::debug!( - "archiving state for {:#x} #{}", - self.current_miniblock_hash, - self.current_miniblock - ); - self.previous_states.insert( - self.current_miniblock_hash, - self.fork_storage - .inner - .read() - .map_err(|err| err.to_string())? - .raw_storage - .state - .clone(), - ); - - Ok(()) - } - - /// Creates a [Snapshot] of the current state of the node. - pub fn snapshot(&self) -> Result { - let storage = self - .fork_storage - .inner - .read() - .map_err(|err| format!("failed acquiring read lock on storage: {:?}", err))?; - - Ok(Snapshot { - current_timestamp: self.current_timestamp, - current_batch: self.current_batch, - current_miniblock: self.current_miniblock, - current_miniblock_hash: self.current_miniblock_hash, - l1_gas_price: self.l1_gas_price, - tx_results: self.tx_results.clone(), - blocks: self.blocks.clone(), - block_hashes: self.block_hashes.clone(), - filters: self.filters.clone(), - impersonated_accounts: self.impersonated_accounts.clone(), - rich_accounts: self.rich_accounts.clone(), - previous_states: self.previous_states.clone(), - raw_storage: storage.raw_storage.clone(), - value_read_cache: storage.value_read_cache.clone(), - factory_dep_cache: storage.factory_dep_cache.clone(), - }) - } - - /// Restores a previously created [Snapshot] of the node. - pub fn restore_snapshot(&mut self, snapshot: Snapshot) -> Result<(), String> { - let mut storage = self - .fork_storage - .inner - .write() - .map_err(|err| format!("failed acquiring write lock on storage: {:?}", err))?; - - self.current_timestamp = snapshot.current_timestamp; - self.current_batch = snapshot.current_batch; - self.current_miniblock = snapshot.current_miniblock; - self.current_miniblock_hash = snapshot.current_miniblock_hash; - self.l1_gas_price = snapshot.l1_gas_price; - self.tx_results = snapshot.tx_results; - self.blocks = snapshot.blocks; - self.block_hashes = snapshot.block_hashes; - self.filters = snapshot.filters; - self.impersonated_accounts = snapshot.impersonated_accounts; - self.rich_accounts = snapshot.rich_accounts; - self.previous_states = snapshot.previous_states; - storage.raw_storage = snapshot.raw_storage; - storage.value_read_cache = snapshot.value_read_cache; - storage.factory_dep_cache = snapshot.factory_dep_cache; - - Ok(()) - } -} - -/// Creates a restorable snapshot for the [InMemoryNodeInner]. The snapshot contains all the necessary -/// data required to restore the [InMemoryNodeInner] state to a previous point in time. -#[derive(Debug, Clone)] -pub struct Snapshot { - pub(crate) current_timestamp: u64, - pub(crate) current_batch: u32, - pub(crate) current_miniblock: u64, - pub(crate) current_miniblock_hash: H256, - pub(crate) l1_gas_price: u64, - pub(crate) tx_results: HashMap, - pub(crate) blocks: HashMap>, - pub(crate) block_hashes: HashMap, - pub(crate) filters: EthFilters, - pub(crate) impersonated_accounts: HashSet
, - pub(crate) rich_accounts: HashSet, - pub(crate) previous_states: IndexMap>, - pub(crate) raw_storage: InMemoryStorage, - pub(crate) value_read_cache: HashMap, - pub(crate) factory_dep_cache: HashMap>>, -} - -/// Defines the configuration parameters for the [InMemoryNode]. -#[derive(Default, Debug, Clone)] -pub struct InMemoryNodeConfig { - pub show_calls: ShowCalls, - pub show_storage_logs: ShowStorageLogs, - pub show_vm_details: ShowVMDetails, - pub show_gas_details: ShowGasDetails, - pub resolve_hashes: bool, - pub system_contracts_options: system_contracts::Options, -} - -/// In-memory node, that can be used for local & unit testing. -/// It also supports the option of forking testnet/mainnet. -/// All contents are removed when object is destroyed. -pub struct InMemoryNode { - inner: Arc>>, -} - -// Derive doesn't work -impl Clone for InMemoryNode { - fn clone(&self) -> Self { - Self { - inner: self.inner.clone(), - } - } -} - -fn contract_address_from_tx_result(execution_result: &VmExecutionResultAndLogs) -> Option { - for query in execution_result.logs.storage_logs.iter().rev() { - if query.log_type == StorageLogQueryType::InitialWrite - && query.log_query.address == ACCOUNT_CODE_STORAGE_ADDRESS - { - return Some(h256_to_account_address(&u256_to_h256(query.log_query.key))); - } - } - None -} - -impl Default for InMemoryNode { - fn default() -> Self { - InMemoryNode::new(None, None, InMemoryNodeConfig::default()) - } -} - -impl InMemoryNode { - pub fn new( - fork: Option>, - observability: Option, - config: InMemoryNodeConfig, - ) -> Self { - let inner = if let Some(f) = &fork { - let mut block_hashes = HashMap::::new(); - block_hashes.insert(f.l2_block.number.as_u64(), f.l2_block.hash); - let mut blocks = HashMap::>::new(); - blocks.insert(f.l2_block.hash, f.l2_block.clone()); - - InMemoryNodeInner { - current_timestamp: f.block_timestamp, - current_batch: f.l1_block.0, - current_miniblock: f.l2_miniblock, - current_miniblock_hash: f.l2_miniblock_hash, - l1_gas_price: f.l1_gas_price, - tx_results: Default::default(), - blocks, - block_hashes, - filters: Default::default(), - fork_storage: ForkStorage::new(fork, &config.system_contracts_options), - show_calls: config.show_calls, - show_storage_logs: config.show_storage_logs, - show_vm_details: config.show_vm_details, - show_gas_details: config.show_gas_details, - resolve_hashes: config.resolve_hashes, - console_log_handler: ConsoleLogHandler::default(), - system_contracts: SystemContracts::from_options(&config.system_contracts_options), - impersonated_accounts: Default::default(), - rich_accounts: HashSet::new(), - previous_states: Default::default(), - observability, - } - } else { - let mut block_hashes = HashMap::::new(); - block_hashes.insert(0, H256::zero()); - let mut blocks = HashMap::>::new(); - blocks.insert( - H256::zero(), - create_empty_block(0, NON_FORK_FIRST_BLOCK_TIMESTAMP, 0), - ); - - InMemoryNodeInner { - current_timestamp: NON_FORK_FIRST_BLOCK_TIMESTAMP, - current_batch: 0, - current_miniblock: 0, - current_miniblock_hash: H256::zero(), - l1_gas_price: L1_GAS_PRICE, - tx_results: Default::default(), - blocks, - block_hashes, - filters: Default::default(), - fork_storage: ForkStorage::new(fork, &config.system_contracts_options), - show_calls: config.show_calls, - show_storage_logs: config.show_storage_logs, - show_vm_details: config.show_vm_details, - show_gas_details: config.show_gas_details, - resolve_hashes: config.resolve_hashes, - console_log_handler: ConsoleLogHandler::default(), - system_contracts: SystemContracts::from_options(&config.system_contracts_options), - impersonated_accounts: Default::default(), - rich_accounts: HashSet::new(), - previous_states: Default::default(), - observability, - } - }; - - InMemoryNode { - inner: Arc::new(RwLock::new(inner)), - } - } - - pub fn get_inner(&self) -> Arc>> { - self.inner.clone() - } - - /// Applies multiple transactions - but still one per L1 batch. - pub fn apply_txs(&self, txs: Vec) -> Result<(), String> { - tracing::info!("Running {:?} transactions (one per batch)", txs.len()); - - for tx in txs { - self.run_l2_tx(tx, TxExecutionMode::VerifyExecute)?; - } - - Ok(()) - } - - /// Adds a lot of tokens to a given account. - pub fn set_rich_account(&self, address: H160) { - let key = storage_key_for_eth_balance(&address); - - let mut inner = match self.inner.write() { - Ok(guard) => guard, - Err(e) => { - tracing::info!("Failed to acquire write lock: {}", e); - return; - } - }; - - let keys = { - let mut storage_view = StorageView::new(&inner.fork_storage); - storage_view.set_value(key, u256_to_h256(U256::from(10u128.pow(30)))); - storage_view.modified_storage_keys().clone() - }; - - for (key, value) in keys.iter() { - inner.fork_storage.set_value(*key, *value); - } - inner.rich_accounts.insert(address); - } - - /// Runs L2 'eth call' method - that doesn't commit to a block. - fn run_l2_call(&self, mut l2_tx: L2Tx) -> Result { - let execution_mode = TxExecutionMode::EthCall; - - let inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - - let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); - - let bootloader_code = inner.system_contracts.contracts_for_l2_call(); - - // init vm - - let (batch_env, _) = inner.create_l1_batch_env(storage.clone()); - let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - - let mut vm = Vm::new(batch_env, system_env, storage, HistoryDisabled); - - // We must inject *some* signature (otherwise bootloader code fails to generate hash). - if l2_tx.common_data.signature.is_empty() { - l2_tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); - } - - let tx: Transaction = l2_tx.into(); - vm.push_transaction(tx); - - let call_tracer_result = Arc::new(OnceCell::default()); - - let custom_tracers = - vec![ - Box::new(CallTracer::new(call_tracer_result.clone(), HistoryDisabled)) - as Box>, HistoryDisabled>>, - ]; - - let tx_result = vm.inspect(custom_tracers, vm::VmExecutionMode::OneTx); - - let call_traces = Arc::try_unwrap(call_tracer_result) - .unwrap() - .take() - .unwrap_or_default(); - - match &tx_result.result { - ExecutionResult::Success { output } => { - tracing::info!("Call: {}", "SUCCESS".green()); - let output_bytes = zksync_basic_types::Bytes::from(output.clone()); - tracing::info!("Output: {}", serde_json::to_string(&output_bytes).unwrap()); - } - ExecutionResult::Revert { output } => { - tracing::info!("Call: {}: {}", "FAILED".red(), output); - } - ExecutionResult::Halt { reason } => { - tracing::info!("Call: {} {}", "HALTED".red(), reason) - } - }; - - tracing::info!("=== Console Logs: "); - for call in &call_traces { - inner.console_log_handler.handle_call_recursive(call); - } - - tracing::info!("=== Call traces:"); - for call in &call_traces { - formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); - } - - Ok(tx_result.result) - } - - fn display_detailed_gas_info( - &self, - bootloader_debug_result: Option<&eyre::Result>, - spent_on_pubdata: u32, - ) -> eyre::Result<(), String> { - if let Some(bootloader_result) = bootloader_debug_result { - let bootloader_debug = bootloader_result.clone()?; - - tracing::info!("┌─────────────────────────┐"); - tracing::info!("│ GAS DETAILS │"); - tracing::info!("└─────────────────────────┘"); - - // Total amount of gas (should match tx.gas_limit). - let total_gas_limit = bootloader_debug - .total_gas_limit_from_user - .saturating_sub(bootloader_debug.reserved_gas); - - let intrinsic_gas = total_gas_limit - bootloader_debug.gas_limit_after_intrinsic; - let gas_for_validation = - bootloader_debug.gas_limit_after_intrinsic - bootloader_debug.gas_after_validation; - - let gas_spent_on_compute = bootloader_debug.gas_spent_on_execution - - bootloader_debug.gas_spent_on_bytecode_preparation; - - let gas_used = intrinsic_gas - + gas_for_validation - + bootloader_debug.gas_spent_on_bytecode_preparation - + gas_spent_on_compute; - - tracing::info!( - "Gas - Limit: {} | Used: {} | Refunded: {}", - to_human_size(total_gas_limit), - to_human_size(gas_used), - to_human_size(bootloader_debug.refund_by_operator) - ); - - if bootloader_debug.total_gas_limit_from_user != total_gas_limit { - tracing::info!( - "{}", - format!( - " WARNING: user actually provided more gas {}, but system had a lower max limit.", - to_human_size(bootloader_debug.total_gas_limit_from_user) - ) - .yellow() - ); - } - if bootloader_debug.refund_computed != bootloader_debug.refund_by_operator { - tracing::info!( - "{}", - format!( - " WARNING: Refund by VM: {}, but operator refunded more: {}", - to_human_size(bootloader_debug.refund_computed), - to_human_size(bootloader_debug.refund_by_operator) - ) - .yellow() - ); - } - - if bootloader_debug.refund_computed + gas_used != total_gas_limit { - tracing::info!( - "{}", - format!( - " WARNING: Gas totals don't match. {} != {} , delta: {}", - to_human_size(bootloader_debug.refund_computed + gas_used), - to_human_size(total_gas_limit), - to_human_size( - total_gas_limit.abs_diff(bootloader_debug.refund_computed + gas_used) - ) - ) - .yellow() - ); - } - - let bytes_published = spent_on_pubdata / bootloader_debug.gas_per_pubdata.as_u32(); - - tracing::info!( - "During execution published {} bytes to L1, @{} each - in total {} gas", - to_human_size(bytes_published.into()), - to_human_size(bootloader_debug.gas_per_pubdata), - to_human_size(spent_on_pubdata.into()) - ); - - tracing::info!("Out of {} gas used, we spent:", to_human_size(gas_used)); - tracing::info!( - " {:>15} gas ({:>2}%) for transaction setup", - to_human_size(intrinsic_gas), - to_human_size(intrinsic_gas * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for bytecode preparation (decompression etc)", - to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation), - to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for account validation", - to_human_size(gas_for_validation), - to_human_size(gas_for_validation * 100 / gas_used) - ); - tracing::info!( - " {:>15} gas ({:>2}%) for computations (opcodes)", - to_human_size(gas_spent_on_compute), - to_human_size(gas_spent_on_compute * 100 / gas_used) - ); - - tracing::info!(""); - tracing::info!(""); - tracing::info!( - "{}", - "=== Transaction setup cost breakdown ===".to_owned().bold(), - ); - - tracing::info!("Total cost: {}", to_human_size(intrinsic_gas).bold()); - tracing::info!( - " {:>15} gas ({:>2}%) fixed cost", - to_human_size(bootloader_debug.intrinsic_overhead), - to_human_size(bootloader_debug.intrinsic_overhead * 100 / intrinsic_gas) - ); - tracing::info!( - " {:>15} gas ({:>2}%) operator cost", - to_human_size(bootloader_debug.operator_overhead), - to_human_size(bootloader_debug.operator_overhead * 100 / intrinsic_gas) - ); - - tracing::info!(""); - tracing::info!( - " FYI: operator could have charged up to: {}, so you got {}% discount", - to_human_size(bootloader_debug.required_overhead), - to_human_size( - (bootloader_debug.required_overhead - bootloader_debug.operator_overhead) * 100 - / bootloader_debug.required_overhead - ) - ); - - let publish_block_l1_bytes = BLOCK_OVERHEAD_PUBDATA; - tracing::info!( - "Publishing full block costs the operator up to: {}, where {} is due to {} bytes published to L1", - to_human_size(bootloader_debug.total_overhead_for_block), - to_human_size(bootloader_debug.gas_per_pubdata * publish_block_l1_bytes), - to_human_size(publish_block_l1_bytes.into()) - ); - tracing::info!("Your transaction has contributed to filling up the block in the following way (we take the max contribution as the cost):"); - tracing::info!( - " Circuits overhead:{:>15} ({}% of the full block: {})", - to_human_size(bootloader_debug.overhead_for_circuits), - to_human_size( - bootloader_debug.overhead_for_circuits * 100 - / bootloader_debug.total_overhead_for_block - ), - to_human_size(bootloader_debug.total_overhead_for_block) - ); - tracing::info!( - " Length overhead: {:>15}", - to_human_size(bootloader_debug.overhead_for_length) - ); - tracing::info!( - " Slot overhead: {:>15}", - to_human_size(bootloader_debug.overhead_for_slot) - ); - Ok(()) - } else { - Err("Booloader tracer didn't finish.".to_owned()) - } - } - - /// Executes the given L2 transaction and returns all the VM logs. - pub fn run_l2_tx_inner( - &self, - l2_tx: L2Tx, - execution_mode: TxExecutionMode, - ) -> Result { - let inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - - let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); - - let (batch_env, block_ctx) = inner.create_l1_batch_env(storage.clone()); - - let bootloader_code = { - if inner - .impersonated_accounts - .contains(&l2_tx.common_data.initiator_address) - { - tracing::info!( - "🕵️ Executing tx from impersonated account {:?}", - l2_tx.common_data.initiator_address - ); - inner.system_contracts.contracts(execution_mode, true) - } else { - inner.system_contracts.contracts(execution_mode, false) - } - }; - let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); - - let mut vm = Vm::new( - batch_env.clone(), - system_env, - storage.clone(), - HistoryDisabled, - ); - - let tx: Transaction = l2_tx.clone().into(); - - vm.push_transaction(tx.clone()); - - let call_tracer_result = Arc::new(OnceCell::default()); - let bootloader_debug_result = Arc::new(OnceCell::default()); - - let custom_tracers = vec![ - Box::new(CallTracer::new(call_tracer_result.clone(), HistoryDisabled)) - as Box>, HistoryDisabled>>, - Box::new(BootloaderDebugTracer { - result: bootloader_debug_result.clone(), - }) as Box>, HistoryDisabled>>, - ]; - - let tx_result = vm.inspect(custom_tracers, vm::VmExecutionMode::OneTx); - - let call_traces = call_tracer_result.get().unwrap(); - - let spent_on_pubdata = - tx_result.statistics.gas_used - tx_result.statistics.computational_gas_used; - - tracing::info!("┌─────────────────────────┐"); - tracing::info!("│ TRANSACTION SUMMARY │"); - tracing::info!("└─────────────────────────┘"); - - match &tx_result.result { - ExecutionResult::Success { .. } => tracing::info!("Transaction: {}", "SUCCESS".green()), - ExecutionResult::Revert { .. } => tracing::info!("Transaction: {}", "FAILED".red()), - ExecutionResult::Halt { .. } => tracing::info!("Transaction: {}", "HALTED".red()), - } - - tracing::info!("Initiator: {:?}", tx.initiator_account()); - tracing::info!("Payer: {:?}", tx.payer()); - tracing::info!( - "Gas - Limit: {} | Used: {} | Refunded: {}", - to_human_size(tx.gas_limit()), - to_human_size(tx.gas_limit() - tx_result.refunds.gas_refunded), - to_human_size(tx_result.refunds.gas_refunded.into()) - ); - - match inner.show_gas_details { - ShowGasDetails::None => tracing::info!( - "Use --show-gas-details flag or call config_setShowGasDetails to display more info" - ), - ShowGasDetails::All => { - if self - .display_detailed_gas_info(bootloader_debug_result.get(), spent_on_pubdata) - .is_err() - { - tracing::info!( - "{}", - "!!! FAILED TO GET DETAILED GAS INFO !!!".to_owned().red() - ); - } - } - } - - if inner.show_storage_logs != ShowStorageLogs::None { - tracing::info!(""); - tracing::info!("┌──────────────────┐"); - tracing::info!("│ STORAGE LOGS │"); - tracing::info!("└──────────────────┘"); - } - - for log_query in &tx_result.logs.storage_logs { - match inner.show_storage_logs { - ShowStorageLogs::Write => { - if matches!( - log_query.log_type, - StorageLogQueryType::RepeatedWrite | StorageLogQueryType::InitialWrite - ) { - formatter::print_logs(log_query); - } - } - ShowStorageLogs::Read => { - if log_query.log_type == StorageLogQueryType::Read { - formatter::print_logs(log_query); - } - } - ShowStorageLogs::All => { - formatter::print_logs(log_query); - } - _ => {} - } - } - - if inner.show_vm_details != ShowVMDetails::None { - formatter::print_vm_details(&tx_result); - } - - tracing::info!(""); - tracing::info!("==== Console logs: "); - for call in call_traces { - inner.console_log_handler.handle_call_recursive(call); - } - tracing::info!(""); - let call_traces_count = if !call_traces.is_empty() { - // All calls/sub-calls are stored within the first call trace - call_traces[0].calls.len() - } else { - 0 - }; - tracing::info!( - "==== {} Use --show-calls flag or call config_setShowCalls to display more info.", - format!("{:?} call traces. ", call_traces_count).bold() - ); - - if inner.show_calls != ShowCalls::None { - for call in call_traces { - formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); - } - } - tracing::info!(""); - tracing::info!( - "==== {}", - format!("{} events", tx_result.logs.events.len()).bold() - ); - for event in &tx_result.logs.events { - formatter::print_event(event, inner.resolve_hashes); - } - - // The computed block hash here will be different than that in production. - let hash = compute_hash(block_ctx.miniblock, l2_tx.hash()); - - let mut transaction = zksync_types::api::Transaction::from(l2_tx); - let block_hash = inner - .block_hashes - .get(&inner.current_miniblock) - .ok_or(format!( - "Block hash not found for block: {}", - inner.current_miniblock - ))?; - transaction.block_hash = Some(*block_hash); - transaction.block_number = Some(U64::from(inner.current_miniblock)); - - let block = Block { - hash, - number: U64::from(block_ctx.miniblock), - timestamp: U256::from(batch_env.timestamp), - l1_batch_number: Some(U64::from(batch_env.number.0)), - transactions: vec![TransactionVariant::Full(transaction)], - gas_used: U256::from(tx_result.statistics.gas_used), - gas_limit: U256::from(BLOCK_GAS_LIMIT), - ..Default::default() - }; - - tracing::info!(""); - tracing::info!(""); - - let bytecodes = vm - .get_last_tx_compressed_bytecodes() - .iter() - .map(|b| bytecode_to_factory_dep(b.original.clone())) - .collect(); - - vm.execute(vm::VmExecutionMode::Bootloader); - - let modified_keys = storage.borrow().modified_storage_keys().clone(); - Ok(( - modified_keys, - tx_result, - call_traces.clone(), - block, - bytecodes, - block_ctx, - )) - } - - /// Runs L2 transaction and commits it to a new block. - fn run_l2_tx(&self, l2_tx: L2Tx, execution_mode: TxExecutionMode) -> Result<(), String> { - let tx_hash = l2_tx.hash(); - tracing::info!(""); - tracing::info!("Executing {}", format!("{:?}", tx_hash).bold()); - - { - let mut inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - inner.filters.notify_new_pending_transaction(tx_hash); - } - - let (keys, result, call_traces, block, bytecodes, block_ctx) = - self.run_l2_tx_inner(l2_tx.clone(), execution_mode)?; - - if let ExecutionResult::Halt { reason } = result.result { - // Halt means that something went really bad with the transaction execution (in most cases invalid signature, - // but it could also be bootloader panic etc). - // In such case, we should not persist the VM data, and we should pretend that transaction never existed. - return Err(format!("Transaction HALT: {}", reason)); - } - // Write all the mutated keys (storage slots). - let mut inner = self - .inner - .write() - .map_err(|e| format!("Failed to acquire write lock: {}", e))?; - for (key, value) in keys.iter() { - inner.fork_storage.set_value(*key, *value); - } - - // Write all the factory deps. - for (hash, code) in bytecodes.iter() { - inner.fork_storage.store_factory_dep( - u256_to_h256(*hash), - code.iter() - .flat_map(|entry| { - let mut bytes = vec![0u8; 32]; - entry.to_big_endian(&mut bytes); - bytes.to_vec() - }) - .collect(), - ) - } - - for (log_idx, event) in result.logs.events.iter().enumerate() { - inner.filters.notify_new_log( - &Log { - address: event.address, - topics: event.indexed_topics.clone(), - data: Bytes(event.value.clone()), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_number: block.l1_batch_number, - transaction_hash: Some(tx_hash), - transaction_index: Some(U64::zero()), - log_index: Some(U256::from(log_idx)), - transaction_log_index: Some(U256::from(log_idx)), - log_type: None, - removed: None, - }, - block.number, - ); - } - let tx_receipt = TransactionReceipt { - transaction_hash: tx_hash, - transaction_index: U64::from(0), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_tx_index: None, - l1_batch_number: block.l1_batch_number, - from: l2_tx.initiator_account(), - to: Some(l2_tx.recipient_account()), - cumulative_gas_used: Default::default(), - gas_used: Some(l2_tx.common_data.fee.gas_limit - result.refunds.gas_refunded), - contract_address: contract_address_from_tx_result(&result), - logs: result - .logs - .events - .iter() - .enumerate() - .map(|(log_idx, log)| Log { - address: log.address, - topics: log.indexed_topics.clone(), - data: Bytes(log.value.clone()), - block_hash: Some(block.hash), - block_number: Some(block.number), - l1_batch_number: block.l1_batch_number, - transaction_hash: Some(tx_hash), - transaction_index: Some(U64::zero()), - log_index: Some(U256::from(log_idx)), - transaction_log_index: Some(U256::from(log_idx)), - log_type: None, - removed: None, - }) - .collect(), - l2_to_l1_logs: vec![], - status: Some(if result.result.is_failed() { - U64::from(0) - } else { - U64::from(1) - }), - effective_gas_price: Some(L2_GAS_PRICE.into()), - ..Default::default() - }; - let debug = create_debug_output(&l2_tx, &result, call_traces).expect("create debug output"); // OK to unwrap here as Halt is handled above - inner.tx_results.insert( - tx_hash, - TransactionResult { - info: TxExecutionInfo { - tx: l2_tx, - batch_number: block.l1_batch_number.unwrap_or_default().as_u32(), - miniblock_number: block.number.as_u64(), - result, - }, - receipt: tx_receipt, - debug, - }, - ); - - // With the introduction of 'l2 blocks' (and virtual blocks), - // we are adding one l2 block at the end of each batch (to handle things like remaining events etc). - // You can look at insert_fictive_l2_block function in VM to see how this fake block is inserted. - let block_ctx = block_ctx.new_block(); - let empty_block_at_end_of_batch = - create_empty_block(block_ctx.miniblock, block_ctx.timestamp, block_ctx.batch); - - inner.current_batch = inner.current_batch.saturating_add(1); - - for block in vec![block, empty_block_at_end_of_batch] { - // archive current state before we produce new batch/blocks - if let Err(err) = inner.archive_state() { - tracing::error!( - "failed archiving state for block {}: {}", - inner.current_miniblock, - err - ); - } - - inner.current_miniblock = inner.current_miniblock.saturating_add(1); - inner.current_timestamp = inner.current_timestamp.saturating_add(1); - - let actual_l1_batch_number = block - .l1_batch_number - .expect("block must have a l1_batch_number"); - if actual_l1_batch_number.as_u32() != inner.current_batch { - panic!( - "expected next block to have batch_number {}, got {}", - inner.current_batch, - actual_l1_batch_number.as_u32() - ); - } - - if block.number.as_u64() != inner.current_miniblock { - panic!( - "expected next block to have miniblock {}, got {}", - inner.current_miniblock, - block.number.as_u64() - ); - } - - if block.timestamp.as_u64() != inner.current_timestamp { - panic!( - "expected next block to have timestamp {}, got {}", - inner.current_timestamp, - block.timestamp.as_u64() - ); - } - - let block_hash = block.hash; - inner.current_miniblock_hash = block_hash; - inner.block_hashes.insert(block.number.as_u64(), block.hash); - inner.blocks.insert(block.hash, block); - inner.filters.notify_new_block(block_hash); - } - - Ok(()) - } -} - -/// Keeps track of a block's batch number, miniblock number and timestamp. -/// Useful for keeping track of the current context when creating multiple blocks. -pub struct BlockContext { - pub batch: u32, - pub miniblock: u64, - pub timestamp: u64, -} - -impl BlockContext { - /// Create the current instance that represents the latest block. - pub fn from_current(batch: u32, miniblock: u64, timestamp: u64) -> Self { - Self { - batch, - miniblock, - timestamp, - } - } - - /// Create the next batch instance that has all parameters incremented by `1`. - pub fn new_batch(&self) -> Self { - Self { - batch: self.batch.saturating_add(1), - miniblock: self.miniblock.saturating_add(1), - timestamp: self.timestamp.saturating_add(1), - } - } - - /// Create the next batch instance that uses the same batch number, and has all other parameters incremented by `1`. - pub fn new_block(&self) -> BlockContext { - Self { - batch: self.batch, - miniblock: self.miniblock.saturating_add(1), - timestamp: self.timestamp.saturating_add(1), - } - } -} +use crate::{ + filters::{FilterType, LogFilter}, + fork::ForkSource, + namespaces::{EthNamespaceT, EthTestNodeNamespaceT, RpcResult}, + node::{InMemoryNode, TransactionResult, L2_GAS_PRICE, MAX_TX_SIZE, PROTOCOL_VERSION}, + utils::{self, h256_to_u64, not_implemented, IntoBoxedFuture}, +}; -impl EthNamespaceT for InMemoryNode { +impl EthNamespaceT + for InMemoryNode +{ /// Returns the chain ID of the node. - fn chain_id(&self) -> jsonrpc_core::BoxFuture> { - match self.inner.read() { + fn chain_id(&self) -> RpcResult { + match self.get_inner().read() { Ok(inner) => Ok(U64::from(inner.fork_storage.chain_id.as_u64())).into_boxed_future(), Err(_) => Err(into_jsrpc_error(Web3Error::InternalError)).into_boxed_future(), } @@ -1662,8 +55,8 @@ impl EthNamespaceT for fn call( &self, req: zksync_types::transaction_request::CallRequest, - _block: Option, - ) -> jsonrpc_core::BoxFuture> { + _block: Option, + ) -> RpcResult { match L2Tx::from_request(req.into(), MAX_TX_SIZE) { Ok(mut tx) => { tx.common_data.fee.gas_limit = ETH_CALL_GAS_LIMIT.into(); @@ -1730,12 +123,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` that resolves to a `Result` containing the balance of the specified address as a `U256` or a `jsonrpc_core::Error` if an error occurred. - fn get_balance( - &self, - address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_balance(&self, address: Address, _block: Option) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let balance_key = storage_key_for_standard_token_balance( @@ -1765,17 +154,13 @@ impl EthNamespaceT for /// /// # Returns /// - /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `zksync_types::api::Block`. + /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `Block`. fn get_block_by_number( &self, - block_number: zksync_types::api::BlockNumber, + block_number: BlockNumber, full_transactions: bool, - ) -> BoxFuture< - jsonrpc_core::Result< - Option>, - >, - > { - let inner = Arc::clone(&self.inner); + ) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_block = { @@ -1838,7 +223,7 @@ impl EthNamespaceT for Ok(Some(block)) } - None => Err(into_jsrpc_error(Web3Error::NoBlock)), + None => Ok(None), } }) } @@ -1857,9 +242,9 @@ impl EthNamespaceT for fn get_code( &self, address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let code_key = get_code_key(&address); @@ -1893,9 +278,9 @@ impl EthNamespaceT for fn get_transaction_count( &self, address: zksync_basic_types::Address, - _block: Option, - ) -> BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let nonce_key = get_nonce_key(&address); @@ -1922,8 +307,8 @@ impl EthNamespaceT for fn get_transaction_receipt( &self, hash: zksync_basic_types::H256, - ) -> BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -1951,8 +336,8 @@ impl EthNamespaceT for fn send_raw_transaction( &self, tx_bytes: zksync_basic_types::Bytes, - ) -> jsonrpc_core::BoxFuture> { - let chain_id = match self.inner.read() { + ) -> RpcResult { + let chain_id = match self.get_inner().read() { Ok(reader) => reader.fork_storage.chain_id, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() @@ -2005,17 +390,13 @@ impl EthNamespaceT for /// /// # Returns /// - /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `zksync_types::api::Block`. + /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `Option` of `Block`. fn get_block_by_hash( &self, hash: zksync_basic_types::H256, full_transactions: bool, - ) -> jsonrpc_core::BoxFuture< - jsonrpc_core::Result< - Option>, - >, - > { - let inner = Arc::clone(&self.inner); + ) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_block = { @@ -2070,7 +451,7 @@ impl EthNamespaceT for Ok(Some(block)) } - None => Err(into_jsrpc_error(Web3Error::NoBlock)), + None => Ok(None), } }) } @@ -2087,8 +468,8 @@ impl EthNamespaceT for fn get_transaction_by_hash( &self, hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2109,7 +490,7 @@ impl EthNamespaceT for from: Some(info.tx.initiator_account()), to: Some(info.tx.recipient_account()), value: info.tx.execute.value, - gas_price: Default::default(), + gas_price: Some(U256::from(0)), gas: Default::default(), input: input_data.data.into(), v: Some(chain_id.into()), @@ -2132,7 +513,7 @@ impl EthNamespaceT for max_priority_fee_per_gas: Some( info.tx.common_data.fee.max_priority_fee_per_gas, ), - chain_id, + chain_id: U256::from(chain_id), l1_batch_number: Some(U64::from(info.batch_number as u64)), l1_batch_tx_index: None, }) @@ -2158,10 +539,8 @@ impl EthNamespaceT for } /// Returns the current block number as a `U64` wrapped in a `BoxFuture`. - fn get_block_number( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_block_number(&self) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2184,9 +563,9 @@ impl EthNamespaceT for fn estimate_gas( &self, req: zksync_types::transaction_request::CallRequest, - _block: Option, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + _block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); let reader = match inner.read() { Ok(r) => r, Err(_) => { @@ -2202,7 +581,7 @@ impl EthNamespaceT for } /// Returns the current gas price in U256 format. - fn gas_price(&self) -> jsonrpc_core::BoxFuture> { + fn gas_price(&self) -> RpcResult { let fair_l2_gas_price: u64 = L2_GAS_PRICE; Ok(U256::from(fair_l2_gas_price)).into_boxed_future() } @@ -2229,8 +608,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_filter(&self, filter: Filter) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_filter(&self, filter: Filter) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2238,12 +617,8 @@ impl EthNamespaceT for } }; - let from_block = filter - .from_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); - let to_block = filter - .to_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); + let from_block = filter.from_block.unwrap_or(BlockNumber::Latest); + let to_block = filter.to_block.unwrap_or(BlockNumber::Latest); let addresses = filter.address.unwrap_or_default().0; let mut topics: [Option>; 4] = Default::default(); @@ -2272,8 +647,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_block_filter(&self) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_block_filter(&self) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2294,10 +669,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn new_pending_transaction_filter( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn new_pending_transaction_filter(&self) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2321,8 +694,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an `U256` filter id. - fn uninstall_filter(&self, id: U256) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn uninstall_filter(&self, id: U256) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2348,22 +721,16 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs. - fn get_logs( - &self, - filter: Filter, - ) -> jsonrpc_core::BoxFuture>> { - let reader = match self.inner.read() { + fn get_logs(&self, filter: Filter) -> RpcResult> { + let inner = self.get_inner(); + let reader = match inner.read() { Ok(r) => r, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() } }; - let from_block = filter - .from_block - .unwrap_or(zksync_types::api::BlockNumber::Earliest); - let to_block = filter - .to_block - .unwrap_or(zksync_types::api::BlockNumber::Latest); + let from_block = filter.from_block.unwrap_or(BlockNumber::Earliest); + let to_block = filter.to_block.unwrap_or(BlockNumber::Latest); let addresses = filter.address.unwrap_or_default().0; let mut topics: [Option>; 4] = Default::default(); @@ -2407,11 +774,9 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs. - fn get_filter_logs( - &self, - id: U256, - ) -> jsonrpc_core::BoxFuture> { - let reader = match self.inner.read() { + fn get_filter_logs(&self, id: U256) -> RpcResult { + let inner = self.get_inner(); + let reader = match inner.read() { Ok(r) => r, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() @@ -2449,14 +814,11 @@ impl EthNamespaceT for /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to an array of logs, block hashes, or transaction hashes, /// depending on the filter type, which occurred since last poll. - /// * Filters created with `eth_newFilter` return [Log] objects. + /// * Filters created with `eth_newFilter` return [zksync_types::api::Log] objects. /// * Filters created with `eth_newBlockFilter` return block hashes. /// * Filters created with `eth_newPendingTransactionFilter` return transaction hashes. - fn get_filter_changes( - &self, - id: U256, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + fn get_filter_changes(&self, id: U256) -> RpcResult { + let inner = self.get_inner().clone(); let mut writer = match inner.write() { Ok(r) => r, Err(_) => { @@ -2473,9 +835,9 @@ impl EthNamespaceT for fn get_block_transaction_count_by_number( &self, - block_number: zksync_types::api::BlockNumber, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + block_number: BlockNumber, + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let maybe_result = { @@ -2519,8 +881,8 @@ impl EthNamespaceT for fn get_block_transaction_count_by_hash( &self, block_hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2570,9 +932,9 @@ impl EthNamespaceT for &self, address: zksync_basic_types::Address, idx: U256, - block: Option, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + block: Option, + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let mut writer = match inner.write() { @@ -2586,19 +948,15 @@ impl EthNamespaceT for let block_number = block .map(|block| match block { - zksync_types::api::BlockIdVariant::BlockNumber(block_number) => { - Ok(utils::to_real_block_number( - block_number, - U64::from(writer.current_miniblock), - )) - } - zksync_types::api::BlockIdVariant::BlockNumberObject(o) => { - Ok(utils::to_real_block_number( - o.block_number, - U64::from(writer.current_miniblock), - )) - } - zksync_types::api::BlockIdVariant::BlockHashObject(o) => writer + BlockIdVariant::BlockNumber(block_number) => Ok(utils::to_real_block_number( + block_number, + U64::from(writer.current_miniblock), + )), + BlockIdVariant::BlockNumberObject(o) => Ok(utils::to_real_block_number( + o.block_number, + U64::from(writer.current_miniblock), + )), + BlockIdVariant::BlockHashObject(o) => writer .blocks .get(&o.block_hash) .map(|block| block.number) @@ -2664,8 +1022,8 @@ impl EthNamespaceT for &self, block_hash: zksync_basic_types::H256, index: zksync_basic_types::web3::types::Index, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -2727,10 +1085,10 @@ impl EthNamespaceT for /// A `BoxFuture` containing a `jsonrpc_core::Result` that maybe resolves to a [zksync_types::api::Transaction], if found. fn get_transaction_by_block_number_and_index( &self, - block_number: zksync_types::api::BlockNumber, + block_number: BlockNumber, index: zksync_basic_types::web3::types::Index, - ) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = match inner.read() { @@ -2788,15 +1146,12 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to a hex `String` of the version number. - fn protocol_version(&self) -> jsonrpc_core::BoxFuture> { + fn protocol_version(&self) -> RpcResult { Ok(String::from(PROTOCOL_VERSION)).into_boxed_future() } - fn syncing( - &self, - ) -> jsonrpc_core::BoxFuture> - { - Ok(zksync_basic_types::web3::types::SyncState::NotSyncing).into_boxed_future() + fn syncing(&self) -> RpcResult { + Ok(SyncState::NotSyncing).into_boxed_future() } /// Returns a list of available accounts. /// @@ -2809,8 +1164,8 @@ impl EthNamespaceT for /// # Returns /// /// A `BoxFuture` containing a `jsonrpc_core::Result` that resolves to a `Vec` of addresses. - fn accounts(&self) -> jsonrpc_core::BoxFuture>> { - let inner = Arc::clone(&self.inner); + fn accounts(&self) -> RpcResult> { + let inner = self.get_inner().clone(); let reader = match inner.read() { Ok(r) => r, Err(_) => { @@ -2822,35 +1177,30 @@ impl EthNamespaceT for futures::future::ok(accounts).boxed() } - fn coinbase( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn coinbase(&self) -> RpcResult { not_implemented("eth_coinbase") } - fn compilers(&self) -> jsonrpc_core::BoxFuture>> { + fn compilers(&self) -> RpcResult> { not_implemented("eth_getCompilers") } - fn hashrate(&self) -> jsonrpc_core::BoxFuture> { + fn hashrate(&self) -> RpcResult { not_implemented("eth_hashrate") } fn get_uncle_count_by_block_hash( &self, _hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> { + ) -> RpcResult> { not_implemented("eth_getUncleCountByBlockHash") } - fn get_uncle_count_by_block_number( - &self, - _number: zksync_types::api::BlockNumber, - ) -> jsonrpc_core::BoxFuture>> { + fn get_uncle_count_by_block_number(&self, _number: BlockNumber) -> RpcResult> { not_implemented("eth_getUncleCountByBlockNumber") } - fn mining(&self) -> jsonrpc_core::BoxFuture> { + fn mining(&self) -> RpcResult { not_implemented("eth_mining") } @@ -2871,10 +1221,10 @@ impl EthNamespaceT for fn fee_history( &self, block_count: U64, - _newest_block: zksync_types::api::BlockNumber, + _newest_block: BlockNumber, reward_percentiles: Vec, - ) -> jsonrpc_core::BoxFuture> { - let inner = Arc::clone(&self.inner); + ) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner @@ -2911,7 +1261,7 @@ impl EthNamespaceT for } } -impl EthTestNodeNamespaceT +impl EthTestNodeNamespaceT for InMemoryNode { /// Sends a transaction to the L2 network. Can be used for the impersonated account. @@ -2927,14 +1277,13 @@ impl EthTestNodeNamespa &self, tx: zksync_types::transaction_request::CallRequest, ) -> jsonrpc_core::BoxFuture> { - let chain_id = match self.inner.read() { + let chain_id = match self.get_inner().read() { Ok(reader) => reader.fork_storage.chain_id, Err(_) => { return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() } }; - // TODO: refactor the way the transaction is converted let mut tx_req = TransactionRequest::from(tx.clone()); // EIP-1559 gas fields should be processed separately if tx.gas_price.is_some() { @@ -2951,7 +1300,7 @@ impl EthTestNodeNamespa tx_req.transaction_type = Some(zksync_types::EIP_1559_TX_TYPE.into()); } } - // To be successfully converted into l2 tx + // Needed to calculate hash tx_req.r = Some(U256::default()); tx_req.s = Some(U256::default()); tx_req.v = Some(U64::from(27)); @@ -2974,20 +1323,15 @@ impl EthTestNodeNamespa .boxed() } }; - // For non-legacy txs v was overwritten with 0 while converting into l2 tx + + // `v` was overwritten with 0 during converting into l2 tx let mut signature = vec![0u8; 65]; signature[64] = 27; l2_tx.common_data.signature = signature; l2_tx.set_input(bytes, hash); - if hash != l2_tx.hash() { - return futures::future::err(into_jsrpc_error(Web3Error::InvalidTransactionData( - zksync_types::ethabi::Error::InvalidData, - ))) - .boxed(); - }; - match self.inner.read() { + match self.get_inner().read() { Ok(reader) => { if !reader .impersonated_accounts @@ -3005,7 +1349,7 @@ impl EthTestNodeNamespa } match self.run_l2_tx(l2_tx.clone(), TxExecutionMode::VerifyExecute) { - Ok(_) => Ok(hash).into_boxed_future(), + Ok(_) => Ok(l2_tx.hash()).into_boxed_future(), Err(e) => { let error_message = format!("Execution error: {}", e); futures::future::err(into_jsrpc_error(Web3Error::SubmitTransactionError( @@ -3022,18 +1366,20 @@ impl EthTestNodeNamespa mod tests { use crate::{ cache::CacheConfig, + fork::ForkDetails, http_fork_source::HttpForkSource, - node::InMemoryNode, + node::{compute_hash, InMemoryNode, Snapshot}, testing::{ self, default_tx_debug_info, ForkBlockConfig, LogBuilder, MockServer, TransactionResponseBuilder, }, }; use maplit::hashmap; - use zksync_basic_types::Nonce; + use zksync_basic_types::{web3, Nonce}; use zksync_types::{ - api::{BlockHashObject, BlockNumber, BlockNumberObject}, + api::{BlockHashObject, BlockNumber, BlockNumberObject, TransactionReceipt}, utils::deployed_address_create, + PackedEthSignature, }; use zksync_web3_decl::types::{SyncState, ValueOrArray}; @@ -3120,29 +1466,69 @@ mod tests { } #[tokio::test] - async fn test_get_block_by_hash_produces_no_block_error_for_non_existing_block() { + async fn test_get_block_by_hash_returns_none_for_non_existing_block() { let node = InMemoryNode::::default(); - let expected_err = into_jsrpc_error(Web3Error::NoBlock); - let result = node.get_block_by_hash(H256::repeat_byte(0x01), false).await; + let result = node + .get_block_by_hash(H256::repeat_byte(0x01), false) + .await + .expect("failed fetching block by hash"); - assert_eq!(expected_err, result.unwrap_err()); + assert!(result.is_none()); } #[tokio::test] - async fn test_node_run_has_genesis_block() { + async fn test_node_has_genesis_block() { let node = InMemoryNode::::default(); let block = node .get_block_by_number(BlockNumber::Latest, false) .await - .expect("failed fetching block by hash") + .expect("failed fetching block by number") .expect("no block"); assert_eq!(0, block.number.as_u64()); assert_eq!(compute_hash(0, H256::zero()), block.hash); } + #[tokio::test] + async fn test_node_creates_genesis_block_with_hash_and_zero_parent_hash() { + let node = InMemoryNode::::default(); + + let block = node + .get_block_by_hash(compute_hash(0, H256::zero()), false) + .await + .expect("failed fetching block by hash") + .expect("no block"); + + assert_eq!(block.parent_hash, H256::zero()); + } + + #[tokio::test] + async fn test_node_produces_blocks_with_parent_hash_links() { + let node = InMemoryNode::::default(); + testing::apply_tx(&node, H256::repeat_byte(0x01)); + + let genesis_block = node + .get_block_by_number(BlockNumber::from(0), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + let first_block = node + .get_block_by_number(BlockNumber::from(1), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + let second_block = node + .get_block_by_number(BlockNumber::from(2), false) + .await + .expect("failed fetching block by number") + .expect("no block"); + + assert_eq!(genesis_block.hash, first_block.parent_hash); + assert_eq!(first_block.hash, second_block.parent_hash); + } + #[tokio::test] async fn test_get_block_by_hash_for_produced_block() { let node = InMemoryNode::::default(); @@ -3175,7 +1561,8 @@ mod tests { Default::default(), ); - let inner = node.inner.read().unwrap(); + let inner = node.get_inner(); + let inner = inner.read().unwrap(); assert!( inner.blocks.contains_key(&input_block_hash), "block wasn't cached" @@ -3230,15 +1617,15 @@ mod tests { } #[tokio::test] - async fn test_get_block_by_number_produces_no_block_error_for_non_existing_block() { + async fn test_get_block_by_number_returns_none_for_non_existing_block() { let node = InMemoryNode::::default(); - let expected_err = into_jsrpc_error(Web3Error::NoBlock); let result = node .get_block_by_number(BlockNumber::Number(U64::from(42)), false) - .await; + .await + .expect("failed fetching block by number"); - assert_eq!(expected_err, result.unwrap_err()); + assert!(result.is_none()); } #[tokio::test] @@ -3784,17 +2171,18 @@ mod tests { u256_to_h256(U256::zero()), ); let input_storage_value = H256::repeat_byte(0xcd); - node.inner + node.get_inner() .write() .unwrap() .fork_storage .set_value(input_storage_key, input_storage_value); - let initial_miniblock = node.inner.read().unwrap().current_miniblock; + let initial_miniblock = node.get_inner().read().unwrap().current_miniblock; testing::apply_tx(&node, H256::repeat_byte(0x1)); - let current_miniblock = node.inner.read().unwrap().current_miniblock; + let current_miniblock = node.get_inner().read().unwrap().current_miniblock; - let reader = node.inner.read().unwrap(); + let inner = node.get_inner(); + let reader = inner.read().unwrap(); for miniblock in initial_miniblock..current_miniblock { let actual_cached_value = reader .block_hashes @@ -3886,7 +2274,7 @@ mod tests { let input_storage_value = H256::repeat_byte(0xcd); let node = InMemoryNode::::default(); - node.inner + node.get_inner() .write() .map(|mut writer| { let historical_block = Block:: { @@ -3955,7 +2343,7 @@ mod tests { None, Default::default(), ); - node.inner + node.get_inner() .write() .map(|mut writer| { let historical_block = Block:: { @@ -4047,7 +2435,7 @@ mod tests { AccountTreeId::new(deployed_address), u256_to_h256(U256::from(0)), ); - node.inner + node.get_inner() .write() .unwrap() .fork_storage @@ -4085,7 +2473,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4143,7 +2532,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4171,7 +2561,8 @@ mod tests { // populate tx receipts with 2 tx each having logs { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.tx_results.insert( H256::repeat_byte(0x1), TransactionResult { @@ -4257,7 +2648,8 @@ mod tests { #[tokio::test] async fn test_snapshot() { let node = InMemoryNode::::default(); - let mut inner = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut inner = inner.write().unwrap(); inner .blocks @@ -4291,11 +2683,11 @@ mod tests { let storage = inner.fork_storage.inner.read().unwrap(); let expected_snapshot = Snapshot { - current_timestamp: inner.current_timestamp.clone(), - current_batch: inner.current_batch.clone(), - current_miniblock: inner.current_miniblock.clone(), - current_miniblock_hash: inner.current_miniblock_hash.clone(), - l1_gas_price: inner.l1_gas_price.clone(), + current_timestamp: inner.current_timestamp, + current_batch: inner.current_batch, + current_miniblock: inner.current_miniblock, + current_miniblock_hash: inner.current_miniblock_hash, + l1_gas_price: inner.l1_gas_price, tx_results: inner.tx_results.clone(), blocks: inner.blocks.clone(), block_hashes: inner.block_hashes.clone(), @@ -4359,7 +2751,8 @@ mod tests { #[tokio::test] async fn test_snapshot_restore() { let node = InMemoryNode::::default(); - let mut inner = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut inner = inner.write().unwrap(); inner .blocks @@ -4394,11 +2787,11 @@ mod tests { let expected_snapshot = { let storage = inner.fork_storage.inner.read().unwrap(); Snapshot { - current_timestamp: inner.current_timestamp.clone(), - current_batch: inner.current_batch.clone(), - current_miniblock: inner.current_miniblock.clone(), - current_miniblock_hash: inner.current_miniblock_hash.clone(), - l1_gas_price: inner.l1_gas_price.clone(), + current_timestamp: inner.current_timestamp, + current_batch: inner.current_batch, + current_miniblock: inner.current_miniblock, + current_miniblock_hash: inner.current_miniblock_hash, + l1_gas_price: inner.l1_gas_price, tx_results: inner.tx_results.clone(), blocks: inner.blocks.clone(), block_hashes: inner.block_hashes.clone(), @@ -4558,7 +2951,8 @@ mod tests { // store the block info with just the tx hash invariant { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer.blocks.insert( input_block_hash, Block { @@ -4707,7 +3101,8 @@ mod tests { // store the block info with just the tx hash invariant { - let mut writer = node.inner.write().unwrap(); + let inner = node.get_inner(); + let mut writer = inner.write().unwrap(); writer .block_hashes .insert(input_block_number.as_u64(), input_block_hash); @@ -4730,7 +3125,7 @@ mod tests { .expect("no transaction"); assert_eq!(input_tx_hash, actual_tx.hash); - assert_eq!(Some(U64::from(input_block_number)), actual_tx.block_number); + assert_eq!(Some(input_block_number), actual_tx.block_number); } #[tokio::test] @@ -4756,7 +3151,7 @@ mod tests { TransactionResponseBuilder::new() .set_hash(input_tx_hash) .set_block_hash(input_block_hash) - .set_block_number(U64::from(input_block_number)) + .set_block_number(input_block_number) .build(), ); diff --git a/src/node/evm.rs b/src/node/evm.rs new file mode 100644 index 00000000..71af8c19 --- /dev/null +++ b/src/node/evm.rs @@ -0,0 +1,68 @@ +use zksync_basic_types::U64; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{EvmNamespaceT, RpcResult}, + node::InMemoryNode, + utils::IntoBoxedFuture, +}; + +impl EvmNamespaceT + for InMemoryNode +{ + fn increase_time(&self, time_delta_seconds: u64) -> RpcResult { + self.increase_time(time_delta_seconds) + .map_err(|err| { + tracing::error!("failed increasing time: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn evm_mine(&self) -> RpcResult { + self.mine_block() + .map_err(|err| { + tracing::error!("failed mining block: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_next_block_timestamp(&self, timestamp: u64) -> RpcResult { + self.set_next_block_timestamp(timestamp) + .map_err(|err| { + tracing::error!("failed setting time for next timestamp: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_time(&self, time: u64) -> RpcResult { + self.set_time(time) + .map_err(|err| { + tracing::error!("failed setting time: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn snapshot(&self) -> RpcResult { + self.snapshot() + .map_err(|err| { + tracing::error!("failed creating snapshot: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn revert_snapshot(&self, snapshot_id: U64) -> RpcResult { + self.revert_snapshot(snapshot_id) + .map_err(|err| { + tracing::error!("failed reverting snapshot: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } +} diff --git a/src/node/hardhat.rs b/src/node/hardhat.rs new file mode 100644 index 00000000..23abda98 --- /dev/null +++ b/src/node/hardhat.rs @@ -0,0 +1,68 @@ +use zksync_basic_types::{Address, U256, U64}; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_web3_decl::error::Web3Error; + +use crate::{ + fork::ForkSource, + namespaces::{HardhatNamespaceT, RpcResult}, + node::InMemoryNode, + utils::IntoBoxedFuture, +}; + +impl HardhatNamespaceT + for InMemoryNode +{ + fn set_balance(&self, address: Address, balance: U256) -> RpcResult { + self.set_balance(address, balance) + .map_err(|err| { + tracing::error!("failed setting balance : {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_nonce(&self, address: Address, balance: U256) -> RpcResult { + self.set_nonce(address, balance) + .map_err(|err| { + tracing::error!("failed setting nonce: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn hardhat_mine(&self, num_blocks: Option, interval: Option) -> RpcResult { + self.mine_blocks(num_blocks, interval) + .map_err(|err| { + tracing::error!("failed mining blocks: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn impersonate_account(&self, address: Address) -> RpcResult { + self.impersonate_account(address) + .map_err(|err| { + tracing::error!("failed impersonating account: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn stop_impersonating_account(&self, address: Address) -> RpcResult { + InMemoryNode::::stop_impersonating_account(self, address) + .map_err(|err| { + tracing::error!("failed stopping to impersonate account: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } + + fn set_code(&self, address: Address, code: Vec) -> RpcResult<()> { + self.set_code(address, code) + .map_err(|err| { + tracing::error!("failed setting code: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .into_boxed_future() + } +} diff --git a/src/node/in_memory.rs b/src/node/in_memory.rs new file mode 100644 index 00000000..766f5d72 --- /dev/null +++ b/src/node/in_memory.rs @@ -0,0 +1,1834 @@ +//! In-memory node, that supports forking other networks. +use crate::{ + bootloader_debug::{BootloaderDebug, BootloaderDebugTracer}, + console_log::ConsoleLogHandler, + deps::InMemoryStorage, + filters::EthFilters, + fork::{ForkDetails, ForkSource, ForkStorage}, + formatter, + observability::Observability, + system_contracts::{self, SystemContracts}, + utils::{ + adjust_l1_gas_price_for_tx, bytecode_to_factory_dep, create_debug_output, to_human_size, + }, +}; +use clap::Parser; +use colored::Colorize; +use core::fmt::Display; +use indexmap::IndexMap; +use once_cell::sync::OnceCell; +use std::{ + cmp::{self}, + collections::{HashMap, HashSet}, + str::FromStr, + sync::{Arc, RwLock}, +}; + +use multivm::interface::{ + ExecutionResult, L1BatchEnv, L2BlockEnv, SystemEnv, TxExecutionMode, VmExecutionMode, + VmExecutionResultAndLogs, VmInterface, +}; +use multivm::{ + tracers::CallTracer, + vm_latest::HistoryDisabled, + vm_latest::{ + constants::{BLOCK_GAS_LIMIT, BLOCK_OVERHEAD_PUBDATA, MAX_PUBDATA_PER_BLOCK}, + utils::{ + fee::derive_base_fee_and_gas_per_pubdata, + l2_blocks::load_last_l2_block, + overhead::{derive_overhead, OverheadCoefficients}, + }, + ToTracerPointer, TracerPointer, Vm, + }, +}; +use zksync_basic_types::{ + web3::signing::keccak256, Address, Bytes, L1BatchNumber, MiniblockNumber, H160, H256, U256, U64, +}; +use zksync_contracts::BaseSystemContracts; +use zksync_core::api_server::web3::backend_jsonrpc::error::into_jsrpc_error; +use zksync_state::{ReadStorage, StoragePtr, StorageView, WriteStorage}; +use zksync_types::{ + api::{Block, DebugCall, Log, TransactionReceipt, TransactionVariant}, + block::legacy_miniblock_hash, + fee::Fee, + get_nonce_key, + l2::L2Tx, + l2::TransactionType, + utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, + vm_trace::Call, + PackedEthSignature, StorageKey, StorageLogQueryType, StorageValue, Transaction, + ACCOUNT_CODE_STORAGE_ADDRESS, EIP_712_TX_TYPE, MAX_GAS_PER_PUBDATA_BYTE, MAX_L2_TX_GAS_LIMIT, +}; +use zksync_utils::{ + bytecode::{compress_bytecode, hash_bytecode}, + h256_to_account_address, h256_to_u256, u256_to_h256, +}; +use zksync_web3_decl::error::Web3Error; + +/// Max possible size of an ABI encoded tx (in bytes). +pub const MAX_TX_SIZE: usize = 1_000_000; +/// Timestamp of the first block (if not running in fork mode). +pub const NON_FORK_FIRST_BLOCK_TIMESTAMP: u64 = 1_000; +/// Network ID we use for the test node. +pub const TEST_NODE_NETWORK_ID: u32 = 260; +/// L1 Gas Price. +pub const L1_GAS_PRICE: u64 = 50_000_000_000; +/// L2 Gas Price (0.25 gwei). +pub const L2_GAS_PRICE: u64 = 250_000_000; +/// L1 Gas Price Scale Factor for gas estimation. +pub const ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR: f64 = 1.2; +/// The max possible number of gas that `eth_estimateGas` is allowed to overestimate. +pub const ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD: u32 = 100; +/// Acceptable gas overestimation limit. +pub const ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION: u32 = 1_000; +/// The factor by which to scale the gasLimit. +pub const ESTIMATE_GAS_SCALE_FACTOR: f32 = 1.3; +/// The maximum number of previous blocks to store the state for. +pub const MAX_PREVIOUS_STATES: u16 = 128; +/// The zks protocol version. +pub const PROTOCOL_VERSION: &str = "zks/1"; + +pub fn compute_hash(block_number: u64, tx_hash: H256) -> H256 { + let digest = [&block_number.to_be_bytes()[..], tx_hash.as_bytes()].concat(); + H256(keccak256(&digest)) +} + +pub fn create_empty_block( + block_number: u64, + timestamp: u64, + batch: u32, + parent_block_hash: Option, +) -> Block { + let hash = compute_hash(block_number, H256::zero()); + let parent_hash = parent_block_hash.unwrap_or(if block_number == 0 { + H256::zero() + } else { + compute_hash(block_number - 1, H256::zero()) + }); + Block { + hash, + parent_hash, + number: U64::from(block_number), + timestamp: U256::from(timestamp), + l1_batch_number: Some(U64::from(batch)), + transactions: vec![], + gas_used: U256::from(0), + gas_limit: U256::from(BLOCK_GAS_LIMIT), + ..Default::default() + } +} + +/// Information about the executed transaction. +#[derive(Debug, Clone)] +pub struct TxExecutionInfo { + pub tx: L2Tx, + // Batch number where transaction was executed. + pub batch_number: u32, + pub miniblock_number: u64, + pub result: VmExecutionResultAndLogs, +} + +#[derive(Debug, Default, clap::Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowCalls { + #[default] + None, + User, + System, + All, +} + +impl FromStr for ShowCalls { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowCalls::None), + "user" => Ok(ShowCalls::User), + "system" => Ok(ShowCalls::System), + "all" => Ok(ShowCalls::All), + _ => Err(format!( + "Unknown ShowCalls value {} - expected one of none|user|system|all.", + s + )), + } + } +} + +impl Display for ShowCalls { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowStorageLogs { + #[default] + None, + Read, + Write, + All, +} + +impl FromStr for ShowStorageLogs { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowStorageLogs::None), + "read" => Ok(ShowStorageLogs::Read), + "write" => Ok(ShowStorageLogs::Write), + "all" => Ok(ShowStorageLogs::All), + _ => Err(format!( + "Unknown ShowStorageLogs value {} - expected one of none|read|write|all.", + s + )), + } + } +} + +impl Display for ShowStorageLogs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowVMDetails { + #[default] + None, + All, +} + +impl FromStr for ShowVMDetails { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowVMDetails::None), + "all" => Ok(ShowVMDetails::All), + _ => Err(format!( + "Unknown ShowVMDetails value {} - expected one of none|all.", + s + )), + } + } +} + +impl Display for ShowVMDetails { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Default, Parser, Clone, clap::ValueEnum, PartialEq, Eq)] +pub enum ShowGasDetails { + #[default] + None, + All, +} + +impl FromStr for ShowGasDetails { + type Err = String; + + fn from_str(s: &str) -> Result { + match s.to_lowercase().as_ref() { + "none" => Ok(ShowGasDetails::None), + "all" => Ok(ShowGasDetails::All), + _ => Err(format!( + "Unknown ShowGasDetails value {} - expected one of none|all.", + s + )), + } + } +} + +impl Display for ShowGasDetails { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + write!(f, "{:?}", self) + } +} + +#[derive(Debug, Clone)] +pub struct TransactionResult { + pub info: TxExecutionInfo, + pub receipt: TransactionReceipt, + pub debug: DebugCall, +} + +impl TransactionResult { + /// Returns the debug information for the transaction. + /// If `only_top` is true - will only return the top level call. + pub fn debug_info(&self, only_top: bool) -> DebugCall { + let calls = if only_top { + vec![] + } else { + self.debug.calls.clone() + }; + DebugCall { + calls, + ..self.debug.clone() + } + } +} + +/// Helper struct for InMemoryNode. +/// S - is the Source of the Fork. +#[derive(Clone)] +pub struct InMemoryNodeInner { + /// The latest timestamp that was already generated. + /// Next block will be current_timestamp + 1 + pub current_timestamp: u64, + /// The latest batch number that was already generated. + /// Next block will be current_batch + 1 + pub current_batch: u32, + /// The latest miniblock number that was already generated. + /// Next transaction will go to the block current_miniblock + 1 + pub current_miniblock: u64, + /// The latest miniblock hash. + pub current_miniblock_hash: H256, + pub l1_gas_price: u64, + // Map from transaction to details about the exeuction + pub tx_results: HashMap, + // Map from block hash to information about the block. + pub blocks: HashMap>, + // Map from block number to a block hash. + pub block_hashes: HashMap, + // Map from filter_id to the eth filter + pub filters: EthFilters, + // Underlying storage + pub fork_storage: ForkStorage, + // Debug level information. + pub show_calls: ShowCalls, + // Displays storage logs. + pub show_storage_logs: ShowStorageLogs, + // Displays VM details. + pub show_vm_details: ShowVMDetails, + // Gas details information. + pub show_gas_details: ShowGasDetails, + // If true - will contact openchain to resolve the ABI to function names. + pub resolve_hashes: bool, + pub console_log_handler: ConsoleLogHandler, + pub system_contracts: SystemContracts, + pub impersonated_accounts: HashSet
, + pub rich_accounts: HashSet, + /// Keeps track of historical states indexed via block hash. Limited to [MAX_PREVIOUS_STATES]. + pub previous_states: IndexMap>, + /// An optional handle to the observability stack + pub observability: Option, +} + +type L2TxResult = ( + HashMap, + VmExecutionResultAndLogs, + Vec, + Block, + HashMap>, + BlockContext, +); + +impl InMemoryNodeInner { + pub fn create_l1_batch_env( + &self, + storage: StoragePtr, + ) -> (L1BatchEnv, BlockContext) { + let last_l2_block_hash = if let Some(last_l2_block) = load_last_l2_block(storage) { + last_l2_block.hash + } else { + // This is the scenario of either the first L2 block ever or + // the first block after the upgrade for support of L2 blocks. + legacy_miniblock_hash(MiniblockNumber(self.current_miniblock as u32)) + }; + let block_ctx = BlockContext::from_current( + self.current_batch, + self.current_miniblock, + self.current_timestamp, + ); + let block_ctx = block_ctx.new_batch(); + let batch_env = L1BatchEnv { + // TODO: set the previous batch hash properly (take from fork, when forking, and from local storage, when this is not the first block). + previous_batch_hash: None, + number: L1BatchNumber::from(block_ctx.batch), + timestamp: block_ctx.timestamp, + l1_gas_price: self.l1_gas_price, + fair_l2_gas_price: L2_GAS_PRICE, + fee_account: H160::zero(), + enforced_base_fee: None, + first_l2_block: L2BlockEnv { + // the 'current_miniblock' contains the block that was already produced. + // So the next one should be one higher. + number: block_ctx.miniblock as u32, + timestamp: block_ctx.timestamp, + prev_block_hash: last_l2_block_hash, + // This is only used during zksyncEra block timestamp/number transition. + // In case of starting a new network, it doesn't matter. + // In theory , when forking mainnet, we should match this value + // to the value that was set in the node at that time - but AFAIK + // we don't have any API for this - so this might result in slightly + // incorrect replays of transacions during the migration period, that + // depend on block number or timestamp. + max_virtual_blocks_to_create: 1, + }, + }; + + (batch_env, block_ctx) + } + + pub fn create_system_env( + &self, + base_system_contracts: BaseSystemContracts, + execution_mode: TxExecutionMode, + ) -> SystemEnv { + SystemEnv { + zk_porter_available: false, + // TODO: when forking, we could consider taking the protocol version id from the fork itself. + version: zksync_types::ProtocolVersionId::latest(), + base_system_smart_contracts: base_system_contracts, + gas_limit: BLOCK_GAS_LIMIT, + execution_mode, + default_validation_computational_gas_limit: BLOCK_GAS_LIMIT, + chain_id: self.fork_storage.chain_id, + } + } + + /// Estimates the gas required for a given call request. + /// + /// # Arguments + /// + /// * `req` - A `CallRequest` struct representing the call request to estimate gas for. + /// + /// # Returns + /// + /// A `Result` with a `Fee` representing the estimated gas related data. + pub fn estimate_gas_impl( + &self, + req: zksync_types::transaction_request::CallRequest, + ) -> jsonrpc_core::Result { + let mut request_with_gas_per_pubdata_overridden = req; + + if let Some(ref mut eip712_meta) = request_with_gas_per_pubdata_overridden.eip712_meta { + if eip712_meta.gas_per_pubdata == U256::zero() { + eip712_meta.gas_per_pubdata = MAX_GAS_PER_PUBDATA_BYTE.into(); + } + } + + let is_eip712 = request_with_gas_per_pubdata_overridden + .eip712_meta + .is_some(); + + let mut l2_tx = + match L2Tx::from_request(request_with_gas_per_pubdata_overridden.into(), MAX_TX_SIZE) { + Ok(tx) => tx, + Err(e) => { + let error = Web3Error::SerializationError(e); + return Err(into_jsrpc_error(error)); + } + }; + + let tx: Transaction = l2_tx.clone().into(); + let fair_l2_gas_price = L2_GAS_PRICE; + + // Calculate Adjusted L1 Price + let l1_gas_price = { + let current_l1_gas_price = + ((self.l1_gas_price as f64) * ESTIMATE_GAS_L1_GAS_PRICE_SCALE_FACTOR) as u64; + + // In order for execution to pass smoothly, we need to ensure that block's required gasPerPubdata will be + // <= to the one in the transaction itself. + adjust_l1_gas_price_for_tx( + current_l1_gas_price, + L2_GAS_PRICE, + tx.gas_per_pubdata_byte_limit(), + ) + }; + + let (base_fee, gas_per_pubdata_byte) = + derive_base_fee_and_gas_per_pubdata(l1_gas_price, fair_l2_gas_price); + + // Properly format signature + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = vec![0u8; 65]; + l2_tx.common_data.signature[64] = 27; + } + + // The user may not include the proper transaction type during the estimation of + // the gas fee. However, it is needed for the bootloader checks to pass properly. + if is_eip712 { + l2_tx.common_data.transaction_type = TransactionType::EIP712Transaction; + } + + l2_tx.common_data.fee.gas_per_pubdata_limit = MAX_GAS_PER_PUBDATA_BYTE.into(); + l2_tx.common_data.fee.max_fee_per_gas = base_fee.into(); + l2_tx.common_data.fee.max_priority_fee_per_gas = base_fee.into(); + + let mut storage_view = StorageView::new(&self.fork_storage); + + // Calculate gas_for_bytecodes_pubdata + let pubdata_for_factory_deps = l2_tx + .execute + .factory_deps + .as_deref() + .unwrap_or_default() + .iter() + .map(|bytecode| { + if storage_view.is_bytecode_known(&hash_bytecode(bytecode)) { + return 0; + } + + let length = if let Ok(compressed) = compress_bytecode(bytecode) { + compressed.len() + } else { + bytecode.len() + }; + length as u32 + ESTIMATE_GAS_PUBLISH_BYTE_OVERHEAD + }) + .sum::(); + + if pubdata_for_factory_deps > MAX_PUBDATA_PER_BLOCK { + return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + "exceeds limit for published pubdata".into(), + Default::default(), + ))); + } + + let gas_for_bytecodes_pubdata: u32 = + pubdata_for_factory_deps * (gas_per_pubdata_byte as u32); + + let storage = storage_view.to_rc_ptr(); + + let execution_mode = TxExecutionMode::EstimateFee; + let (mut batch_env, _) = self.create_l1_batch_env(storage.clone()); + batch_env.l1_gas_price = l1_gas_price; + let impersonating = self + .impersonated_accounts + .contains(&l2_tx.common_data.initiator_address); + let system_env = self.create_system_env( + self.system_contracts + .contracts_for_fee_estimate(impersonating) + .clone(), + execution_mode, + ); + + // We are using binary search to find the minimal values of gas_limit under which the transaction succeeds + let mut lower_bound = 0; + let mut upper_bound = MAX_L2_TX_GAS_LIMIT as u32; + let mut attempt_count = 1; + + tracing::trace!("Starting gas estimation loop"); + while lower_bound + ESTIMATE_GAS_ACCEPTABLE_OVERESTIMATION < upper_bound { + let mid = (lower_bound + upper_bound) / 2; + tracing::trace!( + "Attempt {} (lower_bound: {}, upper_bound: {}, mid: {})", + attempt_count, + lower_bound, + upper_bound, + mid + ); + let try_gas_limit = gas_for_bytecodes_pubdata + mid; + + let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( + l2_tx.clone(), + gas_per_pubdata_byte, + try_gas_limit, + l1_gas_price, + batch_env.clone(), + system_env.clone(), + &self.fork_storage, + ); + + if estimate_gas_result.result.is_failed() { + tracing::trace!("Attempt {} FAILED", attempt_count); + lower_bound = mid + 1; + } else { + tracing::trace!("Attempt {} SUCCEEDED", attempt_count); + upper_bound = mid; + } + attempt_count += 1; + } + + tracing::trace!("Gas Estimation Values:"); + tracing::trace!(" Final upper_bound: {}", upper_bound); + tracing::trace!(" ESTIMATE_GAS_SCALE_FACTOR: {}", ESTIMATE_GAS_SCALE_FACTOR); + tracing::trace!(" MAX_L2_TX_GAS_LIMIT: {}", MAX_L2_TX_GAS_LIMIT); + let tx_body_gas_limit = cmp::min( + MAX_L2_TX_GAS_LIMIT as u32, + (upper_bound as f32 * ESTIMATE_GAS_SCALE_FACTOR) as u32, + ); + let suggested_gas_limit = tx_body_gas_limit + gas_for_bytecodes_pubdata; + + let estimate_gas_result = InMemoryNodeInner::estimate_gas_step( + l2_tx.clone(), + gas_per_pubdata_byte, + suggested_gas_limit, + l1_gas_price, + batch_env, + system_env, + &self.fork_storage, + ); + + let coefficients = OverheadCoefficients::from_tx_type(EIP_712_TX_TYPE); + let overhead: u32 = derive_overhead( + suggested_gas_limit, + gas_per_pubdata_byte as u32, + tx.encoding_len(), + coefficients, + ); + + match estimate_gas_result.result { + ExecutionResult::Revert { output } => { + tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + let message = output.to_string(); + let pretty_message = format!( + "execution reverted{}{}", + if message.is_empty() { "" } else { ": " }, + message + ); + let data = output.encoded_data(); + tracing::info!("{}", pretty_message.on_red()); + Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + pretty_message, + data, + ))) + } + ExecutionResult::Halt { reason } => { + tracing::info!("{}", format!("Unable to estimate gas for the request with our suggested gas limit of {}. The transaction is most likely unexecutable. Breakdown of estimation:", suggested_gas_limit + overhead).red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + let message = reason.to_string(); + let pretty_message = format!( + "execution reverted{}{}", + if message.is_empty() { "" } else { ": " }, + message + ); + + tracing::info!("{}", pretty_message.on_red()); + Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + pretty_message, + vec![], + ))) + } + ExecutionResult::Success { .. } => { + let full_gas_limit = match tx_body_gas_limit + .overflowing_add(gas_for_bytecodes_pubdata + overhead) + { + (value, false) => value, + (_, true) => { + tracing::info!("{}", "Overflow when calculating gas estimation. We've exceeded the block gas limit by summing the following values:".red()); + tracing::info!( + "{}", + format!( + "\tEstimated transaction body gas cost: {}", + tx_body_gas_limit + ) + .red() + ); + tracing::info!( + "{}", + format!("\tGas for pubdata: {}", gas_for_bytecodes_pubdata).red() + ); + tracing::info!("{}", format!("\tOverhead: {}", overhead).red()); + return Err(into_jsrpc_error(Web3Error::SubmitTransactionError( + "exceeds block gas limit".into(), + Default::default(), + ))); + } + }; + + tracing::trace!("Gas Estimation Results"); + tracing::trace!(" tx_body_gas_limit: {}", tx_body_gas_limit); + tracing::trace!(" gas_for_bytecodes_pubdata: {}", gas_for_bytecodes_pubdata); + tracing::trace!(" overhead: {}", overhead); + tracing::trace!(" full_gas_limit: {}", full_gas_limit); + let fee = Fee { + max_fee_per_gas: base_fee.into(), + max_priority_fee_per_gas: 0u32.into(), + gas_limit: full_gas_limit.into(), + gas_per_pubdata_limit: gas_per_pubdata_byte.into(), + }; + Ok(fee) + } + } + } + + /// Runs fee estimation against a sandbox vm with the given gas_limit. + #[allow(clippy::too_many_arguments)] + fn estimate_gas_step( + mut l2_tx: L2Tx, + gas_per_pubdata_byte: u64, + tx_gas_limit: u32, + l1_gas_price: u64, + mut batch_env: L1BatchEnv, + system_env: SystemEnv, + fork_storage: &ForkStorage, + ) -> VmExecutionResultAndLogs { + let tx: Transaction = l2_tx.clone().into(); + let l1_gas_price = + adjust_l1_gas_price_for_tx(l1_gas_price, L2_GAS_PRICE, tx.gas_per_pubdata_byte_limit()); + + let coefficients = OverheadCoefficients::from_tx_type(EIP_712_TX_TYPE); + // Set gas_limit for transaction + let gas_limit_with_overhead = tx_gas_limit + + derive_overhead( + tx_gas_limit, + gas_per_pubdata_byte as u32, + tx.encoding_len(), + coefficients, + ); + l2_tx.common_data.fee.gas_limit = gas_limit_with_overhead.into(); + + let storage = StorageView::new(fork_storage).to_rc_ptr(); + + // The nonce needs to be updated + let nonce = l2_tx.nonce(); + let nonce_key = get_nonce_key(&l2_tx.initiator_account()); + let full_nonce = storage.borrow_mut().read_value(&nonce_key); + let (_, deployment_nonce) = decompose_full_nonce(h256_to_u256(full_nonce)); + let enforced_full_nonce = nonces_to_full_nonce(U256::from(nonce.0), deployment_nonce); + storage + .borrow_mut() + .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); + + // We need to explicitly put enough balance into the account of the users + let payer = l2_tx.payer(); + let balance_key = storage_key_for_eth_balance(&payer); + let mut current_balance = h256_to_u256(storage.borrow_mut().read_value(&balance_key)); + let added_balance = l2_tx.common_data.fee.gas_limit * l2_tx.common_data.fee.max_fee_per_gas; + current_balance += added_balance; + storage + .borrow_mut() + .set_value(balance_key, u256_to_h256(current_balance)); + + batch_env.l1_gas_price = l1_gas_price; + + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); + + let tx: Transaction = l2_tx.into(); + vm.push_transaction(tx); + + vm.execute(VmExecutionMode::OneTx) + } + + /// Sets the `impersonated_account` field of the node. + /// This field is used to override the `tx.initiator_account` field of the transaction in the `run_l2_tx` method. + pub fn set_impersonated_account(&mut self, address: Address) -> bool { + self.impersonated_accounts.insert(address) + } + + /// Clears the `impersonated_account` field of the node. + pub fn stop_impersonating_account(&mut self, address: Address) -> bool { + self.impersonated_accounts.remove(&address) + } + + /// Archives the current state for later queries. + pub fn archive_state(&mut self) -> Result<(), String> { + if self.previous_states.len() > MAX_PREVIOUS_STATES as usize { + if let Some(entry) = self.previous_states.shift_remove_index(0) { + tracing::debug!("removing archived state for previous block {:#x}", entry.0); + } + } + tracing::debug!( + "archiving state for {:#x} #{}", + self.current_miniblock_hash, + self.current_miniblock + ); + self.previous_states.insert( + self.current_miniblock_hash, + self.fork_storage + .inner + .read() + .map_err(|err| err.to_string())? + .raw_storage + .state + .clone(), + ); + + Ok(()) + } + + /// Creates a [Snapshot] of the current state of the node. + pub fn snapshot(&self) -> Result { + let storage = self + .fork_storage + .inner + .read() + .map_err(|err| format!("failed acquiring read lock on storage: {:?}", err))?; + + Ok(Snapshot { + current_timestamp: self.current_timestamp, + current_batch: self.current_batch, + current_miniblock: self.current_miniblock, + current_miniblock_hash: self.current_miniblock_hash, + l1_gas_price: self.l1_gas_price, + tx_results: self.tx_results.clone(), + blocks: self.blocks.clone(), + block_hashes: self.block_hashes.clone(), + filters: self.filters.clone(), + impersonated_accounts: self.impersonated_accounts.clone(), + rich_accounts: self.rich_accounts.clone(), + previous_states: self.previous_states.clone(), + raw_storage: storage.raw_storage.clone(), + value_read_cache: storage.value_read_cache.clone(), + factory_dep_cache: storage.factory_dep_cache.clone(), + }) + } + + /// Restores a previously created [Snapshot] of the node. + pub fn restore_snapshot(&mut self, snapshot: Snapshot) -> Result<(), String> { + let mut storage = self + .fork_storage + .inner + .write() + .map_err(|err| format!("failed acquiring write lock on storage: {:?}", err))?; + + self.current_timestamp = snapshot.current_timestamp; + self.current_batch = snapshot.current_batch; + self.current_miniblock = snapshot.current_miniblock; + self.current_miniblock_hash = snapshot.current_miniblock_hash; + self.l1_gas_price = snapshot.l1_gas_price; + self.tx_results = snapshot.tx_results; + self.blocks = snapshot.blocks; + self.block_hashes = snapshot.block_hashes; + self.filters = snapshot.filters; + self.impersonated_accounts = snapshot.impersonated_accounts; + self.rich_accounts = snapshot.rich_accounts; + self.previous_states = snapshot.previous_states; + storage.raw_storage = snapshot.raw_storage; + storage.value_read_cache = snapshot.value_read_cache; + storage.factory_dep_cache = snapshot.factory_dep_cache; + + Ok(()) + } +} + +/// Creates a restorable snapshot for the [InMemoryNodeInner]. The snapshot contains all the necessary +/// data required to restore the [InMemoryNodeInner] state to a previous point in time. +#[derive(Debug, Clone)] +pub struct Snapshot { + pub(crate) current_timestamp: u64, + pub(crate) current_batch: u32, + pub(crate) current_miniblock: u64, + pub(crate) current_miniblock_hash: H256, + pub(crate) l1_gas_price: u64, + pub(crate) tx_results: HashMap, + pub(crate) blocks: HashMap>, + pub(crate) block_hashes: HashMap, + pub(crate) filters: EthFilters, + pub(crate) impersonated_accounts: HashSet
, + pub(crate) rich_accounts: HashSet, + pub(crate) previous_states: IndexMap>, + pub(crate) raw_storage: InMemoryStorage, + pub(crate) value_read_cache: HashMap, + pub(crate) factory_dep_cache: HashMap>>, +} + +/// Defines the configuration parameters for the [InMemoryNode]. +#[derive(Default, Debug, Clone)] +pub struct InMemoryNodeConfig { + pub show_calls: ShowCalls, + pub show_storage_logs: ShowStorageLogs, + pub show_vm_details: ShowVMDetails, + pub show_gas_details: ShowGasDetails, + pub resolve_hashes: bool, + pub system_contracts_options: system_contracts::Options, +} + +/// In-memory node, that can be used for local & unit testing. +/// It also supports the option of forking testnet/mainnet. +/// All contents are removed when object is destroyed. +#[derive(Clone)] +pub struct InMemoryNode { + /// A thread safe reference to the [InMemoryNodeInner]. + inner: Arc>>, + /// List of snapshots of the [InMemoryNodeInner]. This is bounded at runtime by [MAX_SNAPSHOTS]. + pub(crate) snapshots: Arc>>, +} + +fn contract_address_from_tx_result(execution_result: &VmExecutionResultAndLogs) -> Option { + for query in execution_result.logs.storage_logs.iter().rev() { + if query.log_type == StorageLogQueryType::InitialWrite + && query.log_query.address == ACCOUNT_CODE_STORAGE_ADDRESS + { + return Some(h256_to_account_address(&u256_to_h256(query.log_query.key))); + } + } + None +} + +impl Default for InMemoryNode { + fn default() -> Self { + InMemoryNode::new(None, None, InMemoryNodeConfig::default()) + } +} + +impl InMemoryNode { + pub fn new( + fork: Option>, + observability: Option, + config: InMemoryNodeConfig, + ) -> Self { + let inner = if let Some(f) = &fork { + let mut block_hashes = HashMap::::new(); + block_hashes.insert(f.l2_block.number.as_u64(), f.l2_block.hash); + let mut blocks = HashMap::>::new(); + blocks.insert(f.l2_block.hash, f.l2_block.clone()); + + InMemoryNodeInner { + current_timestamp: f.block_timestamp, + current_batch: f.l1_block.0, + current_miniblock: f.l2_miniblock, + current_miniblock_hash: f.l2_miniblock_hash, + l1_gas_price: f.l1_gas_price, + tx_results: Default::default(), + blocks, + block_hashes, + filters: Default::default(), + fork_storage: ForkStorage::new(fork, &config.system_contracts_options), + show_calls: config.show_calls, + show_storage_logs: config.show_storage_logs, + show_vm_details: config.show_vm_details, + show_gas_details: config.show_gas_details, + resolve_hashes: config.resolve_hashes, + console_log_handler: ConsoleLogHandler::default(), + system_contracts: SystemContracts::from_options(&config.system_contracts_options), + impersonated_accounts: Default::default(), + rich_accounts: HashSet::new(), + previous_states: Default::default(), + observability, + } + } else { + let mut block_hashes = HashMap::::new(); + let block_hash = compute_hash(0, H256::zero()); + block_hashes.insert(0, block_hash); + let mut blocks = HashMap::>::new(); + blocks.insert( + block_hash, + create_empty_block(0, NON_FORK_FIRST_BLOCK_TIMESTAMP, 0, None), + ); + + InMemoryNodeInner { + current_timestamp: NON_FORK_FIRST_BLOCK_TIMESTAMP, + current_batch: 0, + current_miniblock: 0, + current_miniblock_hash: block_hash, + l1_gas_price: L1_GAS_PRICE, + tx_results: Default::default(), + blocks, + block_hashes, + filters: Default::default(), + fork_storage: ForkStorage::new(fork, &config.system_contracts_options), + show_calls: config.show_calls, + show_storage_logs: config.show_storage_logs, + show_vm_details: config.show_vm_details, + show_gas_details: config.show_gas_details, + resolve_hashes: config.resolve_hashes, + console_log_handler: ConsoleLogHandler::default(), + system_contracts: SystemContracts::from_options(&config.system_contracts_options), + impersonated_accounts: Default::default(), + rich_accounts: HashSet::new(), + previous_states: Default::default(), + observability, + } + }; + + InMemoryNode { + inner: Arc::new(RwLock::new(inner)), + snapshots: Default::default(), + } + } + + pub fn get_inner(&self) -> Arc>> { + self.inner.clone() + } + + /// Applies multiple transactions - but still one per L1 batch. + pub fn apply_txs(&self, txs: Vec) -> Result<(), String> { + tracing::info!("Running {:?} transactions (one per batch)", txs.len()); + + for tx in txs { + self.run_l2_tx(tx, TxExecutionMode::VerifyExecute)?; + } + + Ok(()) + } + + /// Adds a lot of tokens to a given account. + pub fn set_rich_account(&self, address: H160) { + let key = storage_key_for_eth_balance(&address); + + let mut inner = match self.inner.write() { + Ok(guard) => guard, + Err(e) => { + tracing::info!("Failed to acquire write lock: {}", e); + return; + } + }; + + let keys = { + let mut storage_view = StorageView::new(&inner.fork_storage); + storage_view.set_value(key, u256_to_h256(U256::from(10u128.pow(30)))); + storage_view.modified_storage_keys().clone() + }; + + for (key, value) in keys.iter() { + inner.fork_storage.set_value(*key, *value); + } + inner.rich_accounts.insert(address); + } + + /// Runs L2 'eth call' method - that doesn't commit to a block. + pub fn run_l2_call(&self, mut l2_tx: L2Tx) -> Result { + let execution_mode = TxExecutionMode::EthCall; + + let inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + + let storage = StorageView::new(&inner.fork_storage).to_rc_ptr(); + + let bootloader_code = inner.system_contracts.contracts_for_l2_call(); + + // init vm + + let (batch_env, _) = inner.create_l1_batch_env(storage.clone()); + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); + + // We must inject *some* signature (otherwise bootloader code fails to generate hash). + if l2_tx.common_data.signature.is_empty() { + l2_tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); + } + + let tx: Transaction = l2_tx.into(); + vm.push_transaction(tx); + + let call_tracer_result = Arc::new(OnceCell::default()); + + let custom_tracer = CallTracer::new(call_tracer_result.clone()).into_tracer_pointer(); + + let tx_result = vm.inspect(custom_tracer.into(), VmExecutionMode::OneTx); + + let call_traces = Arc::try_unwrap(call_tracer_result) + .unwrap() + .take() + .unwrap_or_default(); + + match &tx_result.result { + ExecutionResult::Success { output } => { + tracing::info!("Call: {}", "SUCCESS".green()); + let output_bytes = zksync_basic_types::Bytes::from(output.clone()); + tracing::info!("Output: {}", serde_json::to_string(&output_bytes).unwrap()); + } + ExecutionResult::Revert { output } => { + tracing::info!("Call: {}: {}", "FAILED".red(), output); + } + ExecutionResult::Halt { reason } => { + tracing::info!("Call: {} {}", "HALTED".red(), reason) + } + }; + + tracing::info!("=== Console Logs: "); + for call in &call_traces { + inner.console_log_handler.handle_call_recursive(call); + } + + tracing::info!("=== Call traces:"); + for call in &call_traces { + formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); + } + + Ok(tx_result.result) + } + + fn display_detailed_gas_info( + &self, + bootloader_debug_result: Option<&eyre::Result>, + spent_on_pubdata: u32, + ) -> eyre::Result<(), String> { + if let Some(bootloader_result) = bootloader_debug_result { + let bootloader_debug = bootloader_result.clone()?; + + tracing::info!("┌─────────────────────────┐"); + tracing::info!("│ GAS DETAILS │"); + tracing::info!("└─────────────────────────┘"); + + // Total amount of gas (should match tx.gas_limit). + let total_gas_limit = bootloader_debug + .total_gas_limit_from_user + .saturating_sub(bootloader_debug.reserved_gas); + + let intrinsic_gas = total_gas_limit - bootloader_debug.gas_limit_after_intrinsic; + let gas_for_validation = + bootloader_debug.gas_limit_after_intrinsic - bootloader_debug.gas_after_validation; + + let gas_spent_on_compute = bootloader_debug.gas_spent_on_execution + - bootloader_debug.gas_spent_on_bytecode_preparation; + + let gas_used = intrinsic_gas + + gas_for_validation + + bootloader_debug.gas_spent_on_bytecode_preparation + + gas_spent_on_compute; + + tracing::info!( + "Gas - Limit: {} | Used: {} | Refunded: {}", + to_human_size(total_gas_limit), + to_human_size(gas_used), + to_human_size(bootloader_debug.refund_by_operator) + ); + + if bootloader_debug.total_gas_limit_from_user != total_gas_limit { + tracing::info!( + "{}", + format!( + " WARNING: user actually provided more gas {}, but system had a lower max limit.", + to_human_size(bootloader_debug.total_gas_limit_from_user) + ) + .yellow() + ); + } + if bootloader_debug.refund_computed != bootloader_debug.refund_by_operator { + tracing::info!( + "{}", + format!( + " WARNING: Refund by VM: {}, but operator refunded more: {}", + to_human_size(bootloader_debug.refund_computed), + to_human_size(bootloader_debug.refund_by_operator) + ) + .yellow() + ); + } + + if bootloader_debug.refund_computed + gas_used != total_gas_limit { + tracing::info!( + "{}", + format!( + " WARNING: Gas totals don't match. {} != {} , delta: {}", + to_human_size(bootloader_debug.refund_computed + gas_used), + to_human_size(total_gas_limit), + to_human_size( + total_gas_limit.abs_diff(bootloader_debug.refund_computed + gas_used) + ) + ) + .yellow() + ); + } + + let bytes_published = spent_on_pubdata / bootloader_debug.gas_per_pubdata.as_u32(); + + tracing::info!( + "During execution published {} bytes to L1, @{} each - in total {} gas", + to_human_size(bytes_published.into()), + to_human_size(bootloader_debug.gas_per_pubdata), + to_human_size(spent_on_pubdata.into()) + ); + + tracing::info!("Out of {} gas used, we spent:", to_human_size(gas_used)); + tracing::info!( + " {:>15} gas ({:>2}%) for transaction setup", + to_human_size(intrinsic_gas), + to_human_size(intrinsic_gas * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for bytecode preparation (decompression etc)", + to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation), + to_human_size(bootloader_debug.gas_spent_on_bytecode_preparation * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for account validation", + to_human_size(gas_for_validation), + to_human_size(gas_for_validation * 100 / gas_used) + ); + tracing::info!( + " {:>15} gas ({:>2}%) for computations (opcodes)", + to_human_size(gas_spent_on_compute), + to_human_size(gas_spent_on_compute * 100 / gas_used) + ); + + tracing::info!(""); + tracing::info!(""); + tracing::info!( + "{}", + "=== Transaction setup cost breakdown ===".to_owned().bold(), + ); + + tracing::info!("Total cost: {}", to_human_size(intrinsic_gas).bold()); + tracing::info!( + " {:>15} gas ({:>2}%) fixed cost", + to_human_size(bootloader_debug.intrinsic_overhead), + to_human_size(bootloader_debug.intrinsic_overhead * 100 / intrinsic_gas) + ); + tracing::info!( + " {:>15} gas ({:>2}%) operator cost", + to_human_size(bootloader_debug.operator_overhead), + to_human_size(bootloader_debug.operator_overhead * 100 / intrinsic_gas) + ); + + tracing::info!(""); + tracing::info!( + " FYI: operator could have charged up to: {}, so you got {}% discount", + to_human_size(bootloader_debug.required_overhead), + to_human_size( + (bootloader_debug.required_overhead - bootloader_debug.operator_overhead) * 100 + / bootloader_debug.required_overhead + ) + ); + + let publish_block_l1_bytes = BLOCK_OVERHEAD_PUBDATA; + tracing::info!( + "Publishing full block costs the operator up to: {}, where {} is due to {} bytes published to L1", + to_human_size(bootloader_debug.total_overhead_for_block), + to_human_size(bootloader_debug.gas_per_pubdata * publish_block_l1_bytes), + to_human_size(publish_block_l1_bytes.into()) + ); + tracing::info!("Your transaction has contributed to filling up the block in the following way (we take the max contribution as the cost):"); + tracing::info!( + " Circuits overhead:{:>15} ({}% of the full block: {})", + to_human_size(bootloader_debug.overhead_for_circuits), + to_human_size( + bootloader_debug.overhead_for_circuits * 100 + / bootloader_debug.total_overhead_for_block + ), + to_human_size(bootloader_debug.total_overhead_for_block) + ); + tracing::info!( + " Length overhead: {:>15}", + to_human_size(bootloader_debug.overhead_for_length) + ); + tracing::info!( + " Slot overhead: {:>15}", + to_human_size(bootloader_debug.overhead_for_slot) + ); + Ok(()) + } else { + Err("Booloader tracer didn't finish.".to_owned()) + } + } + + // Validates L2 transaction + fn validate_tx(&self, tx: &L2Tx) -> Result<(), String> { + let max_gas = U256::from(u32::MAX); + if tx.common_data.fee.gas_limit > max_gas + || tx.common_data.fee.gas_per_pubdata_limit > max_gas + { + return Err("exceeds block gas limit".into()); + } + + if tx.common_data.fee.max_fee_per_gas < L2_GAS_PRICE.into() { + tracing::info!( + "Submitted Tx is Unexecutable {:?} because of MaxFeePerGasTooLow {}", + tx.hash(), + tx.common_data.fee.max_fee_per_gas + ); + return Err("block base fee higher than max fee per gas".into()); + } + + if tx.common_data.fee.max_fee_per_gas < tx.common_data.fee.max_priority_fee_per_gas { + tracing::info!( + "Submitted Tx is Unexecutable {:?} because of MaxPriorityFeeGreaterThanMaxFee {}", + tx.hash(), + tx.common_data.fee.max_fee_per_gas + ); + return Err("max priority fee per gas higher than max fee per gas".into()); + } + Ok(()) + } + + /// Executes the given L2 transaction and returns all the VM logs. + /// + /// **NOTE** + /// + /// This function must only rely on data populated initially via [ForkDetails]: + /// * [InMemoryNodeInner::current_timestamp] + /// * [InMemoryNodeInner::current_batch] + /// * [InMemoryNodeInner::current_miniblock] + /// * [InMemoryNodeInner::current_miniblock_hash] + /// * [InMemoryNodeInner::l1_gas_price] + /// + /// And must _NEVER_ rely on data updated in [InMemoryNodeInner] during previous runs: + /// (if used, they must never panic and/or have meaningful defaults) + /// * [InMemoryNodeInner::block_hashes] + /// * [InMemoryNodeInner::blocks] + /// * [InMemoryNodeInner::tx_results] + /// + /// This is because external users of the library may call this function to perform an isolated + /// VM operation with an external storage and get the results back. + /// So any data populated in [Self::run_l2_tx] will not be available for the next invocation. + pub fn run_l2_tx_raw( + &self, + l2_tx: L2Tx, + execution_mode: TxExecutionMode, + mut tracers: Vec< + TracerPointer>, multivm::vm_latest::HistoryDisabled>, + >, + ) -> Result { + let inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + + let storage = StorageView::new(inner.fork_storage.clone()).to_rc_ptr(); + + let (batch_env, block_ctx) = inner.create_l1_batch_env(storage.clone()); + + let bootloader_code = { + if inner + .impersonated_accounts + .contains(&l2_tx.common_data.initiator_address) + { + tracing::info!( + "🕵️ Executing tx from impersonated account {:?}", + l2_tx.common_data.initiator_address + ); + inner.system_contracts.contracts(execution_mode, true) + } else { + inner.system_contracts.contracts(execution_mode, false) + } + }; + let system_env = inner.create_system_env(bootloader_code.clone(), execution_mode); + + let mut vm: Vm<_, HistoryDisabled> = + Vm::new(batch_env.clone(), system_env, storage.clone()); + + let tx: Transaction = l2_tx.clone().into(); + + vm.push_transaction(tx.clone()); + + let call_tracer_result = Arc::new(OnceCell::default()); + let bootloader_debug_result = Arc::new(OnceCell::default()); + + tracers.push(CallTracer::new(call_tracer_result.clone()).into_tracer_pointer()); + tracers.push( + BootloaderDebugTracer { + result: bootloader_debug_result.clone(), + } + .into_tracer_pointer(), + ); + + let tx_result = vm.inspect(tracers.into(), VmExecutionMode::OneTx); + + let call_traces = call_tracer_result.get().unwrap(); + + let spent_on_pubdata = + tx_result.statistics.gas_used - tx_result.statistics.computational_gas_used; + + tracing::info!("┌─────────────────────────┐"); + tracing::info!("│ TRANSACTION SUMMARY │"); + tracing::info!("└─────────────────────────┘"); + + match &tx_result.result { + ExecutionResult::Success { .. } => tracing::info!("Transaction: {}", "SUCCESS".green()), + ExecutionResult::Revert { .. } => tracing::info!("Transaction: {}", "FAILED".red()), + ExecutionResult::Halt { .. } => tracing::info!("Transaction: {}", "HALTED".red()), + } + + tracing::info!("Initiator: {:?}", tx.initiator_account()); + tracing::info!("Payer: {:?}", tx.payer()); + tracing::info!( + "Gas - Limit: {} | Used: {} | Refunded: {}", + to_human_size(tx.gas_limit()), + to_human_size(tx.gas_limit() - tx_result.refunds.gas_refunded), + to_human_size(tx_result.refunds.gas_refunded.into()) + ); + + match inner.show_gas_details { + ShowGasDetails::None => tracing::info!( + "Use --show-gas-details flag or call config_setShowGasDetails to display more info" + ), + ShowGasDetails::All => { + if self + .display_detailed_gas_info(bootloader_debug_result.get(), spent_on_pubdata) + .is_err() + { + tracing::info!( + "{}", + "!!! FAILED TO GET DETAILED GAS INFO !!!".to_owned().red() + ); + } + } + } + + if inner.show_storage_logs != ShowStorageLogs::None { + tracing::info!(""); + tracing::info!("┌──────────────────┐"); + tracing::info!("│ STORAGE LOGS │"); + tracing::info!("└──────────────────┘"); + } + + for log_query in &tx_result.logs.storage_logs { + match inner.show_storage_logs { + ShowStorageLogs::Write => { + if matches!( + log_query.log_type, + StorageLogQueryType::RepeatedWrite | StorageLogQueryType::InitialWrite + ) { + formatter::print_logs(log_query); + } + } + ShowStorageLogs::Read => { + if log_query.log_type == StorageLogQueryType::Read { + formatter::print_logs(log_query); + } + } + ShowStorageLogs::All => { + formatter::print_logs(log_query); + } + _ => {} + } + } + + if inner.show_vm_details != ShowVMDetails::None { + formatter::print_vm_details(&tx_result); + } + + tracing::info!(""); + tracing::info!("==== Console logs: "); + for call in call_traces { + inner.console_log_handler.handle_call_recursive(call); + } + tracing::info!(""); + let call_traces_count = if !call_traces.is_empty() { + // All calls/sub-calls are stored within the first call trace + call_traces[0].calls.len() + } else { + 0 + }; + tracing::info!( + "==== {} Use --show-calls flag or call config_setShowCalls to display more info.", + format!("{:?} call traces. ", call_traces_count).bold() + ); + + if inner.show_calls != ShowCalls::None { + for call in call_traces { + formatter::print_call(call, 0, &inner.show_calls, inner.resolve_hashes); + } + } + tracing::info!(""); + tracing::info!( + "==== {}", + format!("{} events", tx_result.logs.events.len()).bold() + ); + for event in &tx_result.logs.events { + formatter::print_event(event, inner.resolve_hashes); + } + + // The computed block hash here will be different than that in production. + let hash = compute_hash(block_ctx.miniblock, l2_tx.hash()); + + let mut transaction = zksync_types::api::Transaction::from(l2_tx); + transaction.block_hash = Some(inner.current_miniblock_hash); + transaction.block_number = Some(U64::from(inner.current_miniblock)); + + let parent_block_hash = inner + .block_hashes + .get(&(block_ctx.miniblock - 1)) + .cloned() + .unwrap_or_default(); + + let block = Block { + hash, + parent_hash: parent_block_hash, + number: U64::from(block_ctx.miniblock), + timestamp: U256::from(batch_env.timestamp), + l1_batch_number: Some(U64::from(batch_env.number.0)), + transactions: vec![TransactionVariant::Full(transaction)], + gas_used: U256::from(tx_result.statistics.gas_used), + gas_limit: U256::from(BLOCK_GAS_LIMIT), + ..Default::default() + }; + + tracing::info!(""); + + let bytecodes = vm + .get_last_tx_compressed_bytecodes() + .iter() + .map(|b| bytecode_to_factory_dep(b.original.clone())) + .collect(); + + vm.execute(VmExecutionMode::Bootloader); + + let modified_keys = storage.borrow().modified_storage_keys().clone(); + Ok(( + modified_keys, + tx_result, + call_traces.clone(), + block, + bytecodes, + block_ctx, + )) + } + + /// Runs L2 transaction and commits it to a new block. + pub fn run_l2_tx(&self, l2_tx: L2Tx, execution_mode: TxExecutionMode) -> Result<(), String> { + let tx_hash = l2_tx.hash(); + + tracing::info!(""); + tracing::info!("Validating {}", format!("{:?}", tx_hash).bold()); + + match self.validate_tx(&l2_tx) { + Ok(_) => (), + Err(e) => { + return Err(e); + } + }; + + tracing::info!("Executing {}", format!("{:?}", tx_hash).bold()); + + { + let mut inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + inner.filters.notify_new_pending_transaction(tx_hash); + } + + let (keys, result, call_traces, block, bytecodes, block_ctx) = + self.run_l2_tx_raw(l2_tx.clone(), execution_mode, vec![])?; + + if let ExecutionResult::Halt { reason } = result.result { + // Halt means that something went really bad with the transaction execution (in most cases invalid signature, + // but it could also be bootloader panic etc). + // In such case, we should not persist the VM data, and we should pretend that transaction never existed. + return Err(format!("Transaction HALT: {}", reason)); + } + // Write all the mutated keys (storage slots). + let mut inner = self + .inner + .write() + .map_err(|e| format!("Failed to acquire write lock: {}", e))?; + for (key, value) in keys.iter() { + inner.fork_storage.set_value(*key, *value); + } + + // Write all the factory deps. + for (hash, code) in bytecodes.iter() { + inner.fork_storage.store_factory_dep( + u256_to_h256(*hash), + code.iter() + .flat_map(|entry| { + let mut bytes = vec![0u8; 32]; + entry.to_big_endian(&mut bytes); + bytes.to_vec() + }) + .collect(), + ) + } + + for (log_idx, event) in result.logs.events.iter().enumerate() { + inner.filters.notify_new_log( + &Log { + address: event.address, + topics: event.indexed_topics.clone(), + data: Bytes(event.value.clone()), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_number: block.l1_batch_number, + transaction_hash: Some(tx_hash), + transaction_index: Some(U64::zero()), + log_index: Some(U256::from(log_idx)), + transaction_log_index: Some(U256::from(log_idx)), + log_type: None, + removed: Some(false), + }, + block.number, + ); + } + let tx_receipt = TransactionReceipt { + transaction_hash: tx_hash, + transaction_index: U64::from(0), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_tx_index: None, + l1_batch_number: block.l1_batch_number, + from: l2_tx.initiator_account(), + to: Some(l2_tx.recipient_account()), + root: Some(H256::zero()), + cumulative_gas_used: Default::default(), + gas_used: Some(l2_tx.common_data.fee.gas_limit - result.refunds.gas_refunded), + contract_address: contract_address_from_tx_result(&result), + logs: result + .logs + .events + .iter() + .enumerate() + .map(|(log_idx, log)| Log { + address: log.address, + topics: log.indexed_topics.clone(), + data: Bytes(log.value.clone()), + block_hash: Some(block.hash), + block_number: Some(block.number), + l1_batch_number: block.l1_batch_number, + transaction_hash: Some(tx_hash), + transaction_index: Some(U64::zero()), + log_index: Some(U256::from(log_idx)), + transaction_log_index: Some(U256::from(log_idx)), + log_type: None, + removed: Some(false), + }) + .collect(), + l2_to_l1_logs: vec![], + status: Some(if result.result.is_failed() { + U64::from(0) + } else { + U64::from(1) + }), + effective_gas_price: Some(L2_GAS_PRICE.into()), + ..Default::default() + }; + let debug = create_debug_output(&l2_tx, &result, call_traces).expect("create debug output"); // OK to unwrap here as Halt is handled above + inner.tx_results.insert( + tx_hash, + TransactionResult { + info: TxExecutionInfo { + tx: l2_tx, + batch_number: block.l1_batch_number.unwrap_or_default().as_u32(), + miniblock_number: block.number.as_u64(), + result, + }, + receipt: tx_receipt, + debug, + }, + ); + + // With the introduction of 'l2 blocks' (and virtual blocks), + // we are adding one l2 block at the end of each batch (to handle things like remaining events etc). + // You can look at insert_fictive_l2_block function in VM to see how this fake block is inserted. + let block_ctx = block_ctx.new_block(); + let parent_block_hash = block.hash; + let empty_block_at_end_of_batch = create_empty_block( + block_ctx.miniblock, + block_ctx.timestamp, + block_ctx.batch, + Some(parent_block_hash), + ); + + inner.current_batch = inner.current_batch.saturating_add(1); + + for block in vec![block, empty_block_at_end_of_batch] { + // archive current state before we produce new batch/blocks + if let Err(err) = inner.archive_state() { + tracing::error!( + "failed archiving state for block {}: {}", + inner.current_miniblock, + err + ); + } + + inner.current_miniblock = inner.current_miniblock.saturating_add(1); + inner.current_timestamp = inner.current_timestamp.saturating_add(1); + + let actual_l1_batch_number = block + .l1_batch_number + .expect("block must have a l1_batch_number"); + if actual_l1_batch_number.as_u32() != inner.current_batch { + panic!( + "expected next block to have batch_number {}, got {}", + inner.current_batch, + actual_l1_batch_number.as_u32() + ); + } + + if block.number.as_u64() != inner.current_miniblock { + panic!( + "expected next block to have miniblock {}, got {}", + inner.current_miniblock, + block.number.as_u64() + ); + } + + if block.timestamp.as_u64() != inner.current_timestamp { + panic!( + "expected next block to have timestamp {}, got {}", + inner.current_timestamp, + block.timestamp.as_u64() + ); + } + + let block_hash = block.hash; + inner.current_miniblock_hash = block_hash; + inner.block_hashes.insert(block.number.as_u64(), block.hash); + inner.blocks.insert(block.hash, block); + inner.filters.notify_new_block(block_hash); + } + + Ok(()) + } +} + +/// Keeps track of a block's batch number, miniblock number and timestamp. +/// Useful for keeping track of the current context when creating multiple blocks. +pub struct BlockContext { + pub batch: u32, + pub miniblock: u64, + pub timestamp: u64, +} + +impl BlockContext { + /// Create the current instance that represents the latest block. + pub fn from_current(batch: u32, miniblock: u64, timestamp: u64) -> Self { + Self { + batch, + miniblock, + timestamp, + } + } + + /// Create the next batch instance that has all parameters incremented by `1`. + pub fn new_batch(&self) -> Self { + Self { + batch: self.batch.saturating_add(1), + miniblock: self.miniblock.saturating_add(1), + timestamp: self.timestamp.saturating_add(1), + } + } + + /// Create the next batch instance that uses the same batch number, and has all other parameters incremented by `1`. + pub fn new_block(&self) -> BlockContext { + Self { + batch: self.batch, + miniblock: self.miniblock.saturating_add(1), + timestamp: self.timestamp.saturating_add(1), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{http_fork_source::HttpForkSource, node::InMemoryNode, testing}; + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_gas_limit_too_high() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_gas_limit(U256::from(u32::MAX) + 1) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!(result.err(), Some("exceeds block gas limit".into())); + } + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_max_fee_per_gas_too_low() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_max_fee_per_gas(U256::from(250_000_000 - 1)) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!( + result.err(), + Some("block base fee higher than max fee per gas".into()) + ); + } + + #[tokio::test] + async fn test_run_l2_tx_validates_tx_max_priority_fee_per_gas_higher_than_max_fee_per_gas() { + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new() + .set_max_priority_fee_per_gas(U256::from(250_000_000 + 1)) + .build(); + node.set_rich_account(tx.common_data.initiator_address); + + let result = node.run_l2_tx(tx, TxExecutionMode::VerifyExecute); + + assert_eq!( + result.err(), + Some("max priority fee per gas higher than max fee per gas".into()) + ); + } + + #[tokio::test] + async fn test_create_empty_block_creates_genesis_block_with_hash_and_zero_parent_hash() { + let first_block = create_empty_block::(0, 1000, 1, None); + + assert_eq!(first_block.hash, compute_hash(0, H256::zero())); + assert_eq!(first_block.parent_hash, H256::zero()); + } + + #[tokio::test] + async fn test_create_empty_block_creates_block_with_parent_hash_link_to_prev_block() { + let first_block = create_empty_block::(0, 1000, 1, None); + let second_block = create_empty_block::(1, 1000, 1, None); + + assert_eq!(second_block.parent_hash, first_block.hash); + } + + #[tokio::test] + async fn test_create_empty_block_creates_block_with_parent_hash_link_to_provided_parent_hash() { + let first_block = create_empty_block::( + 0, + 1000, + 1, + Some(compute_hash(123, H256::zero())), + ); + let second_block = + create_empty_block::(1, 1000, 1, Some(first_block.hash)); + + assert_eq!(first_block.parent_hash, compute_hash(123, H256::zero())); + assert_eq!(second_block.parent_hash, first_block.hash); + } + + #[tokio::test] + async fn test_run_l2_tx_raw_does_not_panic_on_external_storage_call() { + // Perform a transaction to get storage to an intermediate state + let node = InMemoryNode::::default(); + let tx = testing::TransactionBuilder::new().build(); + node.set_rich_account(tx.common_data.initiator_address); + node.run_l2_tx(tx, TxExecutionMode::VerifyExecute).unwrap(); + let external_storage = node.inner.read().unwrap().fork_storage.clone(); + + // Execute next transaction using a fresh in-memory node and the external fork storage + let mock_db = testing::ExternalStorage { + raw_storage: external_storage.inner.read().unwrap().raw_storage.clone(), + }; + let node = InMemoryNode::new( + Some(ForkDetails { + fork_source: &mock_db, + l1_block: L1BatchNumber(1), + l2_block: Block::default(), + l2_miniblock: 2, + l2_miniblock_hash: Default::default(), + block_timestamp: 1002, + overwrite_chain_id: None, + l1_gas_price: 1000, + }), + None, + Default::default(), + ); + + node.run_l2_tx_raw( + testing::TransactionBuilder::new().build(), + TxExecutionMode::VerifyExecute, + vec![], + ) + .expect("transaction must pass with external storage"); + } +} diff --git a/src/node/in_memory_ext.rs b/src/node/in_memory_ext.rs new file mode 100644 index 00000000..90e5395b --- /dev/null +++ b/src/node/in_memory_ext.rs @@ -0,0 +1,901 @@ +use anyhow::anyhow; +use zksync_basic_types::{Address, U256, U64}; +use zksync_state::ReadStorage; +use zksync_types::{ + get_code_key, get_nonce_key, + utils::{decompose_full_nonce, nonces_to_full_nonce, storage_key_for_eth_balance}, +}; +use zksync_utils::{h256_to_u256, u256_to_h256}; + +use crate::{ + fork::ForkSource, + node::InMemoryNode, + utils::{self, bytecode_to_factory_dep}, +}; + +type Result = anyhow::Result; + +/// The maximum number of [Snapshot]s to store. Each snapshot represents the node state +/// and can be used to revert the node to an earlier point in time. +const MAX_SNAPSHOTS: u8 = 100; + +impl InMemoryNode { + /// Increase the current timestamp for the node + /// + /// # Parameters + /// - `time_delta`: The number of seconds to increase time by + /// + /// # Returns + /// The applied time delta to `current_timestamp` value for the InMemoryNodeInner. + pub fn increase_time(&self, time_delta_seconds: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if time_delta_seconds == 0 { + return time_delta_seconds; + } + + let time_delta = time_delta_seconds.saturating_mul(1000); + writer.current_timestamp = writer.current_timestamp.saturating_add(time_delta); + time_delta_seconds + }) + } + + /// Set the current timestamp for the node. The timestamp must be in future. + /// + /// # Parameters + /// - `timestamp`: The timestamp to set the time to + /// + /// # Returns + /// The new timestamp value for the InMemoryNodeInner. + pub fn set_next_block_timestamp(&self, timestamp: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + if timestamp < writer.current_timestamp { + Err(anyhow!( + "timestamp ({}) must be greater than current timestamp ({})", + timestamp, + writer.current_timestamp + )) + } else { + writer.current_timestamp = timestamp; + Ok(timestamp) + } + }) + } + + /// Set the current timestamp for the node. + /// Warning: This will allow you to move backwards in time, which may cause new blocks to appear to be + /// mined before old blocks. This will result in an invalid state. + /// + /// # Parameters + /// - `time`: The timestamp to set the time to + /// + /// # Returns + /// The difference between the `current_timestamp` and the new timestamp for the InMemoryNodeInner. + pub fn set_time(&self, time: u64) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let time_diff = (time as i128).saturating_sub(writer.current_timestamp as i128); + writer.current_timestamp = time; + time_diff + }) + } + + /// Force a single block to be mined. + /// + /// Will mine an empty block (containing zero transactions) + /// + /// # Returns + /// The string "0x0". + pub fn mine_block(&self) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + utils::mine_empty_blocks(&mut writer, 1, 1000); + tracing::info!("👷 Mined block #{}", writer.current_miniblock); + "0x0".to_string() + }) + } + + /// Snapshot the state of the blockchain at the current block. Takes no parameters. Returns the id of the snapshot + /// that was created. A snapshot can only be reverted once. After a successful evm_revert, the same snapshot id cannot + /// be used again. Consider creating a new snapshot after each evm_revert if you need to revert to the same + /// point multiple times. + /// + /// # Returns + /// The `U64` identifier for this snapshot. + pub fn snapshot(&self) -> Result { + let snapshots = self.snapshots.clone(); + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|writer| { + // validate max snapshots + snapshots + .read() + .map_err(|err| anyhow!("failed acquiring read lock for snapshot: {:?}", err)) + .and_then(|snapshots| { + if snapshots.len() >= MAX_SNAPSHOTS as usize { + return Err(anyhow!( + "maximum number of '{}' snapshots exceeded", + MAX_SNAPSHOTS + )); + } + + Ok(()) + })?; + + // snapshot the node + let snapshot = writer.snapshot().map_err(|err| anyhow!("{}", err))?; + snapshots + .write() + .map(|mut snapshots| { + snapshots.push(snapshot); + tracing::info!("Created snapshot '{}'", snapshots.len()); + snapshots.len() + }) + .map_err(|err| anyhow!("failed storing snapshot: {:?}", err)) + .map(U64::from) + }) + } + + /// Revert the state of the blockchain to a previous snapshot. Takes a single parameter, + /// which is the snapshot id to revert to. This deletes the given snapshot, as well as any snapshots + /// taken after (e.g.: reverting to id 0x1 will delete snapshots with ids 0x1, 0x2, etc.) + /// + /// # Parameters + /// - `snapshot_id`: The snapshot id to revert. + /// + /// # Returns + /// `true` if a snapshot was reverted, otherwise `false`. + pub fn revert_snapshot(&self, snapshot_id: U64) -> Result { + let snapshots = self.snapshots.clone(); + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let mut snapshots = snapshots.write().map_err(|err| { + anyhow!("failed acquiring read lock for snapshots: {:?}", err) + })?; + let snapshot_id_index = snapshot_id.as_usize().saturating_sub(1); + if snapshot_id_index >= snapshots.len() { + return Err(anyhow!("no snapshot exists for the id '{}'", snapshot_id)); + } + + // remove all snapshots following the index and use the first snapshot for restore + let selected_snapshot = snapshots + .drain(snapshot_id_index..) + .next() + .expect("unexpected failure, value must exist"); + + tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); + writer + .restore_snapshot(selected_snapshot) + .map(|_| { + tracing::info!("Reverting node to snapshot '{snapshot_id:?}'"); + true + }) + .map_err(|err| anyhow!("{}", err)) + }) + } + + pub fn set_balance(&self, address: Address, balance: U256) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let balance_key = storage_key_for_eth_balance(&address); + writer + .fork_storage + .set_value(balance_key, u256_to_h256(balance)); + tracing::info!( + "👷 Balance for address {:?} has been manually set to {} Wei", + address, + balance + ); + true + }) + } + + pub fn set_nonce(&self, address: Address, nonce: U256) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let nonce_key = get_nonce_key(&address); + let full_nonce = writer.fork_storage.read_value(&nonce_key); + let (mut account_nonce, mut deployment_nonce) = + decompose_full_nonce(h256_to_u256(full_nonce)); + if account_nonce >= nonce { + return Err(anyhow!( + "Account Nonce is already set to a higher value ({}, requested {})", + account_nonce, + nonce + )); + } + account_nonce = nonce; + if deployment_nonce >= nonce { + return Err(anyhow!( + "Deployment Nonce is already set to a higher value ({}, requested {})", + deployment_nonce, + nonce + )); + } + deployment_nonce = nonce; + let enforced_full_nonce = nonces_to_full_nonce(account_nonce, deployment_nonce); + tracing::info!( + "👷 Nonces for address {:?} have been set to {}", + address, + nonce + ); + writer + .fork_storage + .set_value(nonce_key, u256_to_h256(enforced_full_nonce)); + Ok(true) + }) + } + + pub fn mine_blocks(&self, num_blocks: Option, interval: Option) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .and_then(|mut writer| { + let num_blocks = num_blocks.unwrap_or_else(|| U64::from(1)); + let interval_ms = interval + .unwrap_or_else(|| U64::from(1)) + .saturating_mul(1_000.into()); + if num_blocks.is_zero() { + return Err(anyhow!( + "Number of blocks must be greater than 0".to_string(), + )); + } + utils::mine_empty_blocks(&mut writer, num_blocks.as_u64(), interval_ms.as_u64()); + tracing::info!("👷 Mined {} blocks", num_blocks); + + Ok(true) + }) + } + + pub fn impersonate_account(&self, address: Address) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if writer.set_impersonated_account(address) { + tracing::info!("🕵️ Account {:?} has been impersonated", address); + true + } else { + tracing::info!("🕵️ Account {:?} was already impersonated", address); + false + } + }) + } + + pub fn stop_impersonating_account(&self, address: Address) -> Result { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + if writer.stop_impersonating_account(address) { + tracing::info!("🕵️ Stopped impersonating account {:?}", address); + true + } else { + tracing::info!( + "🕵️ Account {:?} was not impersonated, nothing to stop", + address + ); + false + } + }) + } + + pub fn set_code(&self, address: Address, code: Vec) -> Result<()> { + self.get_inner() + .write() + .map_err(|err| anyhow!("failed acquiring lock: {:?}", err)) + .map(|mut writer| { + let code_key = get_code_key(&address); + tracing::info!("set code for address {address:#x}"); + let (hash, code) = bytecode_to_factory_dep(code); + let hash = u256_to_h256(hash); + writer.fork_storage.store_factory_dep( + hash, + code.iter() + .flat_map(|entry| { + let mut bytes = vec![0u8; 32]; + entry.to_big_endian(&mut bytes); + bytes.to_vec() + }) + .collect(), + ); + writer.fork_storage.set_value(code_key, hash); + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{http_fork_source::HttpForkSource, node::InMemoryNode}; + use std::str::FromStr; + use zksync_basic_types::{Nonce, H256}; + use zksync_core::api_server::web3::backend_jsonrpc::namespaces::eth::EthNamespaceT; + use zksync_types::{api::BlockNumber, fee::Fee, l2::L2Tx, PackedEthSignature}; + + #[tokio::test] + async fn test_set_balance() { + let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); + let node = InMemoryNode::::default(); + + let balance_before = node.get_balance(address, None).await.unwrap(); + + let result = node.set_balance(address, U256::from(1337)).unwrap(); + assert!(result); + + let balance_after = node.get_balance(address, None).await.unwrap(); + assert_eq!(balance_after, U256::from(1337)); + assert_ne!(balance_before, balance_after); + } + + #[tokio::test] + async fn test_set_nonce() { + let address = Address::from_str("0x36615Cf349d7F6344891B1e7CA7C72883F5dc049").unwrap(); + let node = InMemoryNode::::default(); + + let nonce_before = node.get_transaction_count(address, None).await.unwrap(); + + let result = node.set_nonce(address, U256::from(1337)).unwrap(); + assert!(result); + + let nonce_after = node.get_transaction_count(address, None).await.unwrap(); + assert_eq!(nonce_after, U256::from(1337)); + assert_ne!(nonce_before, nonce_after); + + // setting nonce lower than the current one should fail + let result = node.set_nonce(address, U256::from(1336)); + assert!(result.is_err()); + } + + #[tokio::test] + async fn test_mine_blocks_default() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + // test with defaults + let result = node.mine_blocks(None, None).expect("mine_blocks"); + assert!(result); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 1, current_block.number); + assert_eq!(start_block.timestamp + 1, current_block.timestamp); + let result = node.mine_blocks(None, None).expect("mine_blocks"); + assert!(result); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 2, current_block.number); + assert_eq!(start_block.timestamp + 2, current_block.timestamp); + } + + #[tokio::test] + async fn test_mine_blocks() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + let num_blocks = 5; + let interval = 3; + let start_timestamp = start_block.timestamp + 1; + + let result = node + .mine_blocks(Some(U64::from(num_blocks)), Some(U64::from(interval))) + .expect("mine blocks"); + assert!(result); + + for i in 0..num_blocks { + let current_block = node + .get_block_by_number(BlockNumber::Number(start_block.number + i + 1), false) + .await + .unwrap() + .expect("block exists"); + assert_eq!(start_block.number + i + 1, current_block.number); + assert_eq!( + start_timestamp + i * interval * 1_000, + current_block.timestamp + ); + } + } + + #[tokio::test] + async fn test_impersonate_account() { + let node = InMemoryNode::::default(); + let to_impersonate = + Address::from_str("0xd8da6bf26964af9d7eed9e03e53415d37aa96045").unwrap(); + + // give impersonated account some balance + let result = node.set_balance(to_impersonate, U256::exp10(18)).unwrap(); + assert!(result); + + // construct a tx + let mut tx = L2Tx::new( + Address::random(), + vec![], + Nonce(0), + Fee { + gas_limit: U256::from(1_000_000), + max_fee_per_gas: U256::from(250_000_000), + max_priority_fee_per_gas: U256::from(250_000_000), + gas_per_pubdata_limit: U256::from(20000), + }, + to_impersonate, + U256::one(), + None, + Default::default(), + ); + tx.set_input(vec![], H256::random()); + if tx.common_data.signature.is_empty() { + tx.common_data.signature = PackedEthSignature::default().serialize_packed().into(); + } + + // try to execute the tx- should fail without signature + assert!(node.apply_txs(vec![tx.clone()]).is_err()); + + // impersonate the account + let result = node + .impersonate_account(to_impersonate) + .expect("impersonate_account"); + + // result should be true + assert!(result); + + // impersonating the same account again should return false + let result = node + .impersonate_account(to_impersonate) + .expect("impersonate_account"); + assert!(!result); + + // execution should now succeed + assert!(node.apply_txs(vec![tx.clone()]).is_ok()); + + // stop impersonating the account + let result = node + .stop_impersonating_account(to_impersonate) + .expect("stop_impersonating_account"); + + // result should be true + assert!(result); + + // stop impersonating the same account again should return false + let result = node + .stop_impersonating_account(to_impersonate) + .expect("stop_impersonating_account"); + assert!(!result); + + // execution should now fail again + assert!(node.apply_txs(vec![tx]).is_err()); + } + + #[tokio::test] + async fn test_set_code() { + let address = Address::repeat_byte(0x1); + let node = InMemoryNode::::default(); + let new_code = vec![0x1u8; 32]; + + let code_before = node + .get_code(address, None) + .await + .expect("failed getting code") + .0; + assert_eq!(Vec::::default(), code_before); + + node.set_code(address, new_code.clone()) + .expect("failed setting code"); + + let code_after = node + .get_code(address, None) + .await + .expect("failed getting code") + .0; + assert_eq!(new_code, code_after); + } + + #[tokio::test] + async fn test_increase_time_zero_value() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = 0u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + increase_value_seconds.saturating_mul(1000u64), + timestamp_after.saturating_sub(timestamp_before), + "timestamp did not increase by the specified amount", + ); + } + + #[tokio::test] + async fn test_increase_time_max_value() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = u64::MAX; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(0, timestamp_before, "initial timestamp must be non zero",); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + u64::MAX, + timestamp_after, + "timestamp did not saturate upon increase", + ); + } + + #[tokio::test] + async fn test_increase_time() { + let node = InMemoryNode::::default(); + + let increase_value_seconds = 100u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + let expected_response = increase_value_seconds; + + let actual_response = node + .increase_time(increase_value_seconds) + .expect("failed increasing timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + increase_value_seconds.saturating_mul(1000u64), + timestamp_after.saturating_sub(timestamp_before), + "timestamp did not increase by the specified amount", + ); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_future() { + let node = InMemoryNode::::default(); + + let new_timestamp = 10_000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!( + timestamp_before, new_timestamp, + "timestamps must be different" + ); + let expected_response = new_timestamp; + + let actual_response = node + .set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + new_timestamp, timestamp_after, + "timestamp was not set correctly", + ); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_past_fails() { + let node = InMemoryNode::::default(); + + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + let new_timestamp = timestamp_before + 500; + node.set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + + let result = node.set_next_block_timestamp(timestamp_before); + + assert!(result.is_err(), "expected an error for timestamp in past"); + } + + #[tokio::test] + async fn test_set_next_block_timestamp_same_value() { + let node = InMemoryNode::::default(); + + let new_timestamp = 1000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_eq!(timestamp_before, new_timestamp, "timestamps must be same"); + let expected_response = new_timestamp; + + let actual_response = node + .set_next_block_timestamp(new_timestamp) + .expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + timestamp_before, timestamp_after, + "timestamp must not change", + ); + } + + #[tokio::test] + async fn test_set_time_future() { + let node = InMemoryNode::::default(); + + let new_time = 10_000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(timestamp_before, new_time, "timestamps must be different"); + let expected_response = 9000; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); + } + + #[tokio::test] + async fn test_set_time_past() { + let node = InMemoryNode::::default(); + + let new_time = 10u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_ne!(timestamp_before, new_time, "timestamps must be different"); + let expected_response = -990; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!(new_time, timestamp_after, "timestamp was not set correctly",); + } + + #[tokio::test] + async fn test_set_time_same_value() { + let node = InMemoryNode::::default(); + + let new_time = 1000u64; + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + assert_eq!(timestamp_before, new_time, "timestamps must be same"); + let expected_response = 0; + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .expect("failed reading timestamp"); + + assert_eq!(expected_response, actual_response, "erroneous response"); + assert_eq!( + timestamp_before, timestamp_after, + "timestamp must not change", + ); + } + + #[tokio::test] + async fn test_set_time_edges() { + let node = InMemoryNode::::default(); + + for new_time in [0, u64::MAX] { + let timestamp_before = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); + assert_ne!( + timestamp_before, new_time, + "case {new_time}: timestamps must be different" + ); + let expected_response = (new_time as i128).saturating_sub(timestamp_before as i128); + + let actual_response = node.set_time(new_time).expect("failed setting timestamp"); + let timestamp_after = node + .get_inner() + .read() + .map(|inner| inner.current_timestamp) + .unwrap_or_else(|_| panic!("case {}: failed reading timestamp", new_time)); + + assert_eq!( + expected_response, actual_response, + "case {new_time}: erroneous response" + ); + assert_eq!( + new_time, timestamp_after, + "case {new_time}: timestamp was not set correctly", + ); + } + } + + #[tokio::test] + async fn test_mine_block() { + let node = InMemoryNode::::default(); + + let start_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + let result = node.mine_block().expect("mine_block"); + assert_eq!(&result, "0x0"); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 1, current_block.number); + assert_eq!(start_block.timestamp + 1, current_block.timestamp); + + let result = node.mine_block().expect("mine_block"); + assert_eq!(&result, "0x0"); + + let current_block = node + .get_block_by_number(zksync_types::api::BlockNumber::Latest, false) + .await + .unwrap() + .expect("block exists"); + + assert_eq!(start_block.number + 2, current_block.number); + assert_eq!(start_block.timestamp + 2, current_block.timestamp); + } + + #[tokio::test] + async fn test_evm_snapshot_creates_incrementing_ids() { + let node = InMemoryNode::::default(); + + let snapshot_id_1 = node.snapshot().expect("failed creating snapshot 1"); + let snapshot_id_2 = node.snapshot().expect("failed creating snapshot 2"); + + assert_eq!(snapshot_id_1, U64::from(1)); + assert_eq!(snapshot_id_2, U64::from(2)); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_restores_state() { + let node = InMemoryNode::::default(); + + let initial_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + let snapshot_id = node.snapshot().expect("failed creating snapshot"); + node.mine_block().expect("mine_block"); + let current_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + assert_eq!(current_block, initial_block + 1); + + let reverted = node + .revert_snapshot(snapshot_id) + .expect("failed reverting snapshot"); + assert!(reverted); + + let restored_block = node + .get_block_number() + .await + .expect("failed fetching block number"); + assert_eq!(restored_block, initial_block); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_removes_all_snapshots_following_the_reverted_one() { + let node = InMemoryNode::::default(); + + let _snapshot_id_1 = node.snapshot().expect("failed creating snapshot"); + let snapshot_id_2 = node.snapshot().expect("failed creating snapshot"); + let _snapshot_id_3 = node.snapshot().expect("failed creating snapshot"); + assert_eq!(3, node.snapshots.read().unwrap().len()); + + let reverted = node + .revert_snapshot(snapshot_id_2) + .expect("failed reverting snapshot"); + assert!(reverted); + + assert_eq!(1, node.snapshots.read().unwrap().len()); + } + + #[tokio::test] + async fn test_evm_revert_snapshot_fails_for_invalid_snapshot_id() { + let node = InMemoryNode::::default(); + + let result = node.revert_snapshot(U64::from(100)); + assert!(result.is_err()); + } +} diff --git a/src/node/mod.rs b/src/node/mod.rs new file mode 100644 index 00000000..e6638025 --- /dev/null +++ b/src/node/mod.rs @@ -0,0 +1,14 @@ +//! In-memory node, that supports forking other networks. + +mod config; +mod debug; +mod eth; +mod evm; +mod hardhat; +mod in_memory; +mod in_memory_ext; +mod net; +mod web3; +mod zks; + +pub use in_memory::*; diff --git a/src/node/net.rs b/src/node/net.rs new file mode 100644 index 00000000..e61d60f9 --- /dev/null +++ b/src/node/net.rs @@ -0,0 +1,23 @@ +use zksync_basic_types::U256; + +use crate::{ + fork::ForkSource, + namespaces::{NetNamespaceT, Result}, + node::{InMemoryNode, TEST_NODE_NETWORK_ID}, +}; + +impl NetNamespaceT + for InMemoryNode +{ + fn net_version(&self) -> Result { + Ok(TEST_NODE_NETWORK_ID.to_string()) + } + + fn net_peer_count(&self) -> Result { + Ok(U256::from(0)) + } + + fn net_listening(&self) -> Result { + Ok(false) + } +} diff --git a/src/node/web3.rs b/src/node/web3.rs new file mode 100644 index 00000000..1b7402d5 --- /dev/null +++ b/src/node/web3.rs @@ -0,0 +1,13 @@ +use crate::{ + fork::ForkSource, + namespaces::{Result, Web3NamespaceT}, + node::InMemoryNode, +}; + +impl Web3NamespaceT + for InMemoryNode +{ + fn web3_client_version(&self) -> Result { + Ok("zkSync/v2.0".to_string()) + } +} diff --git a/src/zks.rs b/src/node/zks.rs similarity index 72% rename from src/zks.rs rename to src/node/zks.rs index 02df314a..297cb596 100644 --- a/src/zks.rs +++ b/src/node/zks.rs @@ -1,21 +1,21 @@ -use std::sync::{Arc, RwLock}; +use std::collections::HashMap; use bigdecimal::BigDecimal; +use colored::Colorize; use futures::FutureExt; -use zksync_basic_types::{Address, L1BatchNumber, MiniblockNumber, U256}; -use zksync_core::api_server::web3::backend_jsonrpc::{ - error::{internal_error, into_jsrpc_error}, - namespaces::zks::ZksNamespaceT, -}; +use zksync_basic_types::{AccountTreeId, Address, L1BatchNumber, MiniblockNumber, H256, U256}; +use zksync_core::api_server::web3::backend_jsonrpc::error::{internal_error, into_jsrpc_error}; use zksync_state::ReadStorage; use zksync_types::{ api::{ - BlockDetails, BlockDetailsBase, BlockStatus, BridgeAddresses, ProtocolVersion, + BlockDetails, BlockDetailsBase, BlockStatus, BridgeAddresses, Proof, ProtocolVersion, TransactionDetails, TransactionStatus, TransactionVariant, }, fee::Fee, - ExecuteTransactionCommon, ProtocolVersionId, Transaction, + utils::storage_key_for_standard_token_balance, + ExecuteTransactionCommon, ProtocolVersionId, Transaction, L2_ETH_TOKEN_ADDRESS, }; +use zksync_utils::h256_to_u256; use zksync_web3_decl::{ error::Web3Error, types::{Filter, Log}, @@ -23,25 +23,13 @@ use zksync_web3_decl::{ use crate::{ fork::ForkSource, - node::{InMemoryNodeInner, TransactionResult, L2_GAS_PRICE}, + namespaces::{RpcResult, ZksNamespaceT}, + node::{InMemoryNode, TransactionResult, L2_GAS_PRICE}, utils::{not_implemented, utc_datetime_from_epoch_ms, IntoBoxedFuture}, }; -use colored::Colorize; - -/// Mock implementation of ZksNamespace - used only in the test node. -pub struct ZkMockNamespaceImpl { - node: Arc>>, -} - -impl ZkMockNamespaceImpl { - /// Creates a new `Zks` instance with the given `node`. - pub fn new(node: Arc>>) -> Self { - Self { node } - } -} -impl ZksNamespaceT - for ZkMockNamespaceImpl +impl ZksNamespaceT + for InMemoryNode { /// Estimates the gas fee data required for a given call request. /// @@ -52,22 +40,15 @@ impl ZksNamespaceT /// # Returns /// /// A `BoxFuture` containing a `Result` with a `Fee` representing the estimated gas data required. - fn estimate_fee( - &self, - req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::BoxFuture> { - let reader = match self.node.read() { - Ok(r) => r, - Err(_) => { - return futures::future::err(into_jsrpc_error(Web3Error::InternalError)).boxed() - } - }; - - let result: jsonrpc_core::Result = reader.estimate_gas_impl(req); - match result { - Ok(fee) => Ok(fee).into_boxed_future(), - Err(err) => return futures::future::err(err).boxed(), - } + fn estimate_fee(&self, req: zksync_types::transaction_request::CallRequest) -> RpcResult { + self.get_inner() + .read() + .map_err(|err| { + tracing::error!("failed acquiring lock: {:?}", err); + into_jsrpc_error(Web3Error::InternalError) + }) + .and_then(|reader| reader.estimate_gas_impl(req)) + .into_boxed_future() } /// Returns data of transactions in a block. @@ -82,8 +63,8 @@ impl ZksNamespaceT fn get_raw_block_transactions( &self, block_number: MiniblockNumber, - ) -> jsonrpc_core::BoxFuture>> { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -140,29 +121,32 @@ impl ZksNamespaceT }) } + fn get_proof( + &self, + _address: Address, + _keys: Vec, + _l1_batch_number: L1BatchNumber, + ) -> RpcResult { + not_implemented("zks_getProof") + } + fn estimate_gas_l1_to_l2( &self, _req: zksync_types::transaction_request::CallRequest, - ) -> jsonrpc_core::BoxFuture> { + ) -> RpcResult { not_implemented("zks_estimateGasL1ToL2") } - fn get_main_contract( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_main_contract(&self) -> RpcResult { not_implemented("zks_getMainContract") } - fn get_testnet_paymaster( - &self, - ) -> jsonrpc_core::BoxFuture>> { + fn get_testnet_paymaster(&self) -> RpcResult> { not_implemented("zks_getTestnetPaymaster") } - fn get_bridge_contracts( - &self, - ) -> jsonrpc_core::BoxFuture> { - let inner = self.node.clone(); + fn get_bridge_contracts(&self) -> RpcResult { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -192,24 +176,44 @@ impl ZksNamespaceT }) } - fn l1_chain_id( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn l1_chain_id(&self) -> RpcResult { not_implemented("zks_L1ChainId") } fn get_confirmed_tokens( &self, - _from: u32, - _limit: u8, + from: u32, + limit: u8, ) -> jsonrpc_core::BoxFuture>> { - not_implemented("zks_getConfirmedTokens") + let inner = self.get_inner().clone(); + Box::pin(async move { + let reader = inner + .read() + .map_err(|_| into_jsrpc_error(Web3Error::InternalError))?; + + let fork_storage_read = reader + .fork_storage + .inner + .read() + .expect("failed reading fork storage"); + + match fork_storage_read.fork.as_ref() { + Some(fork) => Ok(fork + .fork_source + .get_confirmed_tokens(from, limit) + .map_err(|_e| into_jsrpc_error(Web3Error::InternalError))?), + None => Ok(vec![zksync_web3_decl::types::Token { + l1_address: Address::zero(), + l2_address: L2_ETH_TOKEN_ADDRESS, + name: "Ether".to_string(), + symbol: "ETH".to_string(), + decimals: 18, + }]), + } + }) } - fn get_token_price( - &self, - token_address: zksync_basic_types::Address, - ) -> jsonrpc_core::BoxFuture> { + fn get_token_price(&self, token_address: zksync_basic_types::Address) -> RpcResult { match format!("{:?}", token_address).to_lowercase().as_str() { "0x0000000000000000000000000000000000000000" => { // ETH @@ -241,13 +245,48 @@ impl ZksNamespaceT } } + /// Get all known balances for a given account. + /// + /// # Arguments + /// + /// * `address` - The user address with balances to check. + /// + /// # Returns + /// + /// A `BoxFuture` containing a `Result` with a (Token, Balance) map where account has non-zero value. fn get_all_account_balances( &self, - _address: zksync_basic_types::Address, + address: zksync_basic_types::Address, ) -> jsonrpc_core::BoxFuture< jsonrpc_core::Result>, > { - not_implemented("zks_getAllAccountBalances") + let inner = self.get_inner().clone(); + Box::pin({ + self.get_confirmed_tokens(0, 100) + .then(move |tokens| async move { + let tokens = + tokens.map_err(|_err| into_jsrpc_error(Web3Error::InternalError))?; + + let mut writer = inner + .write() + .map_err(|_err| into_jsrpc_error(Web3Error::InternalError))?; + + let mut balances = HashMap::new(); + for token in tokens { + let balance_key = storage_key_for_standard_token_balance( + AccountTreeId::new(token.l2_address), + &address, + ); + + let balance = writer.fork_storage.read_value(&balance_key); + if !balance.is_zero() { + balances.insert(token.l2_address, h256_to_u256(balance)); + } + } + + Ok(balances) + }) + }) } fn get_l2_to_l1_msg_proof( @@ -256,8 +295,7 @@ impl ZksNamespaceT _sender: zksync_basic_types::Address, _msg: zksync_basic_types::H256, _l2_log_position: Option, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { not_implemented("zks_getL2ToL1MsgProof") } @@ -265,14 +303,11 @@ impl ZksNamespaceT &self, _tx_hash: zksync_basic_types::H256, _index: Option, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { not_implemented("zks_getL2ToL1LogProof") } - fn get_l1_batch_number( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_l1_batch_number(&self) -> RpcResult { not_implemented("zks_L1BatchNumber") } @@ -288,9 +323,8 @@ impl ZksNamespaceT fn get_block_details( &self, block_number: zksync_basic_types::MiniblockNumber, - ) -> jsonrpc_core::BoxFuture>> - { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -368,9 +402,8 @@ impl ZksNamespaceT fn get_transaction_details( &self, hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>> - { - let inner = self.node.clone(); + ) -> RpcResult> { + let inner = self.get_inner().clone(); Box::pin(async move { let reader = inner .read() @@ -433,8 +466,7 @@ impl ZksNamespaceT fn get_l1_batch_details( &self, _batch: zksync_basic_types::L1BatchNumber, - ) -> jsonrpc_core::BoxFuture>> - { + ) -> RpcResult> { Box::pin(async { Ok(None) }) } @@ -447,11 +479,8 @@ impl ZksNamespaceT /// # Returns /// /// A boxed future resolving to a `jsonrpc_core::Result` containing an `Option` of bytes. - fn get_bytecode_by_hash( - &self, - hash: zksync_basic_types::H256, - ) -> jsonrpc_core::BoxFuture>>> { - let inner = self.node.clone(); + fn get_bytecode_by_hash(&self, hash: zksync_basic_types::H256) -> RpcResult>> { + let inner = self.get_inner().clone(); Box::pin(async move { let mut writer = inner .write() @@ -472,23 +501,15 @@ impl ZksNamespaceT }) } - fn get_l1_gas_price( - &self, - ) -> jsonrpc_core::BoxFuture> { + fn get_l1_gas_price(&self) -> RpcResult { not_implemented("zks_getL1GasPrice") } - fn get_protocol_version( - &self, - _version_id: Option, - ) -> jsonrpc_core::BoxFuture>> { + fn get_protocol_version(&self, _version_id: Option) -> RpcResult> { not_implemented("zks_getProtocolVersion") } - fn get_logs_with_virtual_blocks( - &self, - _filter: Filter, - ) -> jsonrpc_core::BoxFuture>> { + fn get_logs_with_virtual_blocks(&self, _filter: Filter) -> RpcResult> { not_implemented("zks_getLogs") } } @@ -507,11 +528,11 @@ mod tests { use zksync_basic_types::{Address, H160, H256}; use zksync_types::api::{self, Block, TransactionReceipt, TransactionVariant}; use zksync_types::transaction_request::CallRequest; + use zksync_utils::u256_to_h256; #[tokio::test] async fn test_estimate_fee() { let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_request = CallRequest { from: Some( @@ -536,9 +557,9 @@ mod tests { eip712_meta: None, }; - let result = namespace.estimate_fee(mock_request).await.unwrap(); + let result = node.estimate_fee(mock_request).await.unwrap(); - assert_eq!(result.gas_limit, U256::from(731457)); + assert_eq!(result.gas_limit, U256::from(746532)); assert_eq!(result.max_fee_per_gas, U256::from(250000000)); assert_eq!(result.max_priority_fee_per_gas, U256::from(0)); assert_eq!(result.gas_per_pubdata_limit, U256::from(4080)); @@ -548,13 +569,12 @@ mod tests { async fn test_get_token_price_given_eth_should_return_price() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x0000000000000000000000000000000000000000") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await.unwrap(); + let result = node.get_token_price(mock_address).await.unwrap(); // Assert assert_eq!(result, BigDecimal::from(1_500)); @@ -564,13 +584,12 @@ mod tests { async fn test_get_token_price_given_capitalized_link_address_should_return_price() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x40609141Db628BeEE3BfAB8034Fc2D8278D0Cc78") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await.unwrap(); + let result = node.get_token_price(mock_address).await.unwrap(); // Assert assert_eq!(result, BigDecimal::from(1)); @@ -580,13 +599,12 @@ mod tests { async fn test_get_token_price_given_unknown_address_should_return_error() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let mock_address = Address::from_str("0x0000000000000000000000000000000000000042") .expect("Failed to parse address"); // Act - let result = namespace.get_token_price(mock_address).await; + let result = node.get_token_price(mock_address).await; // Assert assert!(result.is_err()); @@ -596,7 +614,6 @@ mod tests { async fn test_get_transaction_details_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -614,8 +631,7 @@ mod tests { }, ); } - // Act - let result = namespace + let result = node .get_transaction_details(H256::repeat_byte(0x1)) .await .expect("get transaction details") @@ -666,8 +682,7 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let result = namespace + let result = node .get_transaction_details(input_tx_hash) .await .expect("get transaction details") @@ -681,7 +696,6 @@ mod tests { async fn test_get_block_details_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -689,8 +703,7 @@ mod tests { writer.blocks.insert(H256::repeat_byte(0x1), block); writer.block_hashes.insert(0, H256::repeat_byte(0x1)); } - // Act - let result = namespace + let result = node .get_block_details(MiniblockNumber(0)) .await .expect("get block details") @@ -754,8 +767,7 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let result = namespace + let result = node .get_block_details(miniblock) .await .expect("get block details") @@ -770,7 +782,6 @@ mod tests { async fn test_get_bridge_contracts_uses_default_values_if_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let expected_bridge_addresses = BridgeAddresses { l1_erc20_default_bridge: Default::default(), l2_erc20_default_bridge: Default::default(), @@ -778,8 +789,7 @@ mod tests { l2_weth_bridge: Default::default(), }; - // Act - let actual_bridge_addresses = namespace + let actual_bridge_addresses = node .get_bridge_contracts() .await .expect("get bridge addresses"); @@ -813,8 +823,8 @@ mod tests { "result": { "l1Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l1_erc20_default_bridge), "l2Erc20DefaultBridge": format!("{:#x}", input_bridge_addresses.l2_erc20_default_bridge), - "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.clone().unwrap()), - "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.clone().unwrap()) + "l1WethBridge": format!("{:#x}", input_bridge_addresses.l1_weth_bridge.unwrap()), + "l2WethBridge": format!("{:#x}", input_bridge_addresses.l2_weth_bridge.unwrap()) }, "id": 0 }), @@ -825,10 +835,8 @@ mod tests { None, Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - // Act - let actual_bridge_addresses = namespace + let actual_bridge_addresses = node .get_bridge_contracts() .await .expect("get bridge addresses"); @@ -841,7 +849,6 @@ mod tests { async fn test_get_bytecode_by_hash_returns_local_value_if_available() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let input_hash = H256::repeat_byte(0x1); let input_bytecode = vec![0x1]; node.get_inner() @@ -850,8 +857,7 @@ mod tests { .fork_storage .store_factory_dep(input_hash, input_bytecode.clone()); - // Act - let actual = namespace + let actual = node .get_bytecode_by_hash(input_hash) .await .expect("failed fetching bytecode") @@ -892,10 +898,8 @@ mod tests { None, Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - // Act - let actual = namespace + let actual = node .get_bytecode_by_hash(input_hash) .await .expect("failed fetching bytecode") @@ -909,7 +913,6 @@ mod tests { async fn test_get_raw_block_transactions_local() { // Arrange let node = InMemoryNode::::default(); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); let inner = node.get_inner(); { let mut writer = inner.write().unwrap(); @@ -933,8 +936,7 @@ mod tests { writer.block_hashes.insert(0, H256::repeat_byte(0x1)); } - // Act - let txns = namespace + let txns = node .get_raw_block_transactions(MiniblockNumber(0)) .await .expect("get transaction details"); @@ -1018,11 +1020,156 @@ mod tests { Default::default(), ); - let namespace = ZkMockNamespaceImpl::new(node.get_inner()); - let txns = namespace + let txns = node .get_raw_block_transactions(miniblock) .await .expect("get transaction details"); assert_eq!(txns.len(), 1); } + + #[tokio::test] + async fn test_get_all_account_balances_empty() { + let node = InMemoryNode::::default(); + let balances = node + .get_all_account_balances(Address::zero()) + .await + .expect("get balances"); + assert!(balances.is_empty()); + } + + #[tokio::test] + async fn test_get_confirmed_tokens_eth() { + let node = InMemoryNode::::default(); + let balances = node + .get_confirmed_tokens(0, 100) + .await + .expect("get balances"); + assert_eq!(balances.len(), 1); + assert_eq!(&balances[0].name, "Ether"); + } + + #[tokio::test] + async fn test_get_all_account_balances_forked() { + let cbeth_address = Address::from_str("0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5") + .expect("failed to parse address"); + let mock_server = testing::MockServer::run(); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getBlockDetails", + "params": [1] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": { + "baseSystemContractsHashes": { + "bootloader": "0x010008a5c30072f79f8e04f90b31f34e554279957e7e2bf85d3e9c7c1e0f834d", + "default_aa": "0x01000663d7941c097ba2631096508cf9ec7769ddd40e081fd81b0d04dc07ea0e" + }, + "commitTxHash": null, + "committedAt": null, + "executeTxHash": null, + "executedAt": null, + "l1BatchNumber": 0, + "l1GasPrice": 0, + "l1TxCount": 1, + "l2FairGasPrice": 250000000, + "l2TxCount": 0, + "number": 0, + "operatorAddress": "0x0000000000000000000000000000000000000000", + "protocolVersion": "Version16", + "proveTxHash": null, + "provenAt": null, + "rootHash": "0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", + "status": "verified", + "timestamp": 1000 + }, + "id": 0 + }), + ); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 1, + "method": "eth_getBlockByHash", + "params": ["0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", true] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": { + "baseFeePerGas": "0x0", + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0xffffffff", + "gasUsed": "0x0", + "hash": "0xdaa77426c30c02a43d9fba4e841a6556c524d47030762eb14dc4af897e605d9b", + "l1BatchNumber": "0x0", + "l1BatchTimestamp": null, + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x0000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "sealFields": [], + "sha3Uncles": "0x0000000000000000000000000000000000000000000000000000000000000000", + "size": "0x0", + "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x3e8", + "totalDifficulty": "0x0", + "transactions": [], + "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000", + "uncles": [] + }, + "id": 1 + }), + ); + mock_server.expect( + serde_json::json!({ + "jsonrpc": "2.0", + "id": 0, + "method": "zks_getConfirmedTokens", + "params": [0, 100] + }), + serde_json::json!({ + "jsonrpc": "2.0", + "result": [ + { + "decimals": 18, + "l1Address": "0xbe9895146f7af43049ca1c1ae358b0541ea49704", + "l2Address": "0x75af292c1c9a37b3ea2e6041168b4e48875b9ed5", + "name": "Coinbase Wrapped Staked ETH", + "symbol": "cbETH" + } + ], + "id": 0 + }), + ); + + let node = InMemoryNode::::new( + Some(ForkDetails::from_network(&mock_server.url(), Some(1), CacheConfig::None).await), + None, + Default::default(), + ); + { + let inner = node.get_inner(); + let writer = inner.write().unwrap(); + let mut fork = writer.fork_storage.inner.write().unwrap(); + fork.raw_storage.set_value( + storage_key_for_standard_token_balance( + AccountTreeId::new(cbeth_address), + &Address::repeat_byte(0x1), + ), + u256_to_h256(U256::from(1337)), + ); + } + + let balances = node + .get_all_account_balances(Address::repeat_byte(0x1)) + .await + .expect("get balances"); + assert_eq!(balances.get(&cbeth_address).unwrap(), &U256::from(1337)); + } } diff --git a/src/observability.rs b/src/observability.rs index 1c2bbb1e..ec3039b6 100644 --- a/src/observability.rs +++ b/src/observability.rs @@ -4,8 +4,7 @@ use std::{fs::File, sync::Mutex}; use clap::ValueEnum; use serde::{Deserialize, Serialize}; use tracing_subscriber::{ - filter::LevelFilter, layer::SubscriberExt, reload, util::SubscriberInitExt, EnvFilter, Layer, - Registry, + filter::LevelFilter, layer::SubscriberExt, reload, util::SubscriberInitExt, EnvFilter, Registry, }; /// Log filter level for the node. @@ -63,14 +62,33 @@ impl Observability { format!("{log_level_filter}").to_lowercase() ))?; let (filter, reload_handle) = reload::Layer::new(filter); + + let timer_format = + time::format_description::parse("[hour]:[minute]:[second]").expect("Cataplum"); + let time_offset = time::UtcOffset::current_local_offset().unwrap_or(time::UtcOffset::UTC); + let timer = tracing_subscriber::fmt::time::OffsetTime::new(time_offset, timer_format); + tracing_subscriber::registry() + .with(filter) .with( - filter.and_then(tracing_subscriber::fmt::layer()).and_then( - tracing_subscriber::fmt::layer() - .with_writer(Mutex::new(log_file)) - .with_ansi(false), + tracing_subscriber::fmt::layer().event_format( + tracing_subscriber::fmt::format() + .compact() + .with_timer(timer.clone()) + .with_target(false), ), ) + .with( + tracing_subscriber::fmt::layer() + .event_format( + tracing_subscriber::fmt::format() + .compact() + .with_timer(timer.clone()) + .with_target(false), + ) + .with_writer(Mutex::new(log_file)) + .with_ansi(false), + ) .init(); Ok(Self { diff --git a/src/system_contracts.rs b/src/system_contracts.rs index 35823a8f..1926e7b0 100644 --- a/src/system_contracts.rs +++ b/src/system_contracts.rs @@ -1,4 +1,4 @@ -use vm::TxExecutionMode; +use multivm::interface::TxExecutionMode; use zksync_contracts::{ read_playground_batch_bootloader_bytecode, read_proved_batch_bootloader_bytecode, read_sys_contract_bytecode, read_zbin_bytecode, BaseSystemContracts, ContractLanguage, @@ -72,13 +72,17 @@ impl SystemContracts { match (execution_mode, impersonating) { // 'real' contracts, that do all the checks. (TxExecutionMode::VerifyExecute, false) => &self.baseline_contracts, - // Ignore invalid sigatures. These requests are often coming unsigned, and they keep changing the + // Ignore invalid signatures. These requests are often coming unsigned, and they keep changing the // gas limit - so the signatures are often not matching. (TxExecutionMode::EstimateFee, false) => &self.fee_estimate_contracts, // Read-only call - don't check signatures, have a lower (fixed) gas limit. - (TxExecutionMode::EthCall, _) => &self.playground_contracts, + (TxExecutionMode::EthCall, false) => &self.playground_contracts, + // Without account validation and sender related checks. (TxExecutionMode::VerifyExecute, true) => &self.baseline_impersonating_contracts, (TxExecutionMode::EstimateFee, true) => &self.fee_estimate_impersonating_contracts, + (TxExecutionMode::EthCall, true) => { + panic!("Account impersonating with eth_call is not supported") + } } } } @@ -101,8 +105,12 @@ fn bsc_load_with_bootloader( include_bytes!("deps/contracts/DefaultAccount.json"), ), Options::Local => read_sys_contract_bytecode("", "DefaultAccount", ContractLanguage::Sol), - // TODO: remove - Options::BuiltInWithoutSecurity => unimplemented!(), + // TODO: restore + Options::BuiltInWithoutSecurity => bytecode_from_slice( + "DefaultAccountNoSecurity", + // include_bytes!("deps/contracts/DefaultAccountNoSecurity.json"), + include_bytes!("deps/contracts/DefaultAccount.json"), + ), }; let hash = hash_bytecode(&bytecode); @@ -142,8 +150,7 @@ pub fn playground(options: &Options) -> BaseSystemContracts { /// It sets ENSURE_RETURNED_MAGIC to 0 and BOOTLOADER_TYPE to 'playground_block' pub fn fee_estimate_contracts(options: &Options) -> BaseSystemContracts { let bootloader_bytecode = match options { - Options::BuiltIn | - Options::BuiltInWithoutSecurity => { + Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/fee_estimate.yul.zbin").to_vec() } Options::Local => @@ -155,13 +162,12 @@ pub fn fee_estimate_contracts(options: &Options) -> BaseSystemContracts { pub fn fee_estimate_impersonating_contracts(options: &Options) -> BaseSystemContracts { let bootloader_bytecode = match options { - Options::BuiltIn | - Options::BuiltInWithoutSecurity => { + Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/fee_estimate_impersonating.yul.zbin").to_vec() } Options::Local => - // TODO: maybe not supported? - read_zbin_bytecode("etc/system-contracts/bootloader/build/artifacts/fee_estimate.yul/fee_estimate_impersonating.yul.zbin") + // Account impersonating is not supported with the local contracts + read_zbin_bytecode("etc/system-contracts/bootloader/build/artifacts/fee_estimate.yul/fee_estimate.yul.zbin") }; bsc_load_with_bootloader(bootloader_bytecode, options) @@ -182,7 +188,7 @@ pub fn baseline_impersonating_contracts(options: &Options) -> BaseSystemContract Options::BuiltIn | Options::BuiltInWithoutSecurity => { include_bytes!("deps/contracts/proved_batch_impersonating.yul.zbin").to_vec() } - // TODO: should be supported? + // Account impersonating is not supported with the local contracts Options::Local => read_proved_batch_bootloader_bytecode(), }; bsc_load_with_bootloader(bootloader_bytecode, options) diff --git a/src/testing.rs b/src/testing.rs index 12568d1a..87620b02 100644 --- a/src/testing.rs +++ b/src/testing.rs @@ -5,6 +5,7 @@ #![cfg(test)] +use crate::deps::InMemoryStorage; use crate::node::{InMemoryNode, TxExecutionInfo}; use crate::{fork::ForkSource, node::compute_hash}; @@ -15,14 +16,14 @@ use httptest::{ Expectation, Server, }; use itertools::Itertools; +use multivm::interface::{ExecutionResult, VmExecutionResultAndLogs}; use std::str::FromStr; -use vm::VmExecutionResultAndLogs; -use zksync_basic_types::{H160, U64}; -use zksync_types::api::{BridgeAddresses, DebugCall, DebugCallType, Log}; -use zksync_types::{ - fee::Fee, l2::L2Tx, Address, L2ChainId, Nonce, PackedEthSignature, ProtocolVersionId, H256, - U256, -}; +use zksync_basic_types::{AccountTreeId, MiniblockNumber, H160, U64}; +use zksync_types::api::{BlockIdVariant, BridgeAddresses, DebugCall, DebugCallType, Log}; +use zksync_types::block::pack_block_info; +use zksync_types::StorageKey; +use zksync_types::{fee::Fee, l2::L2Tx, Address, L2ChainId, Nonce, ProtocolVersionId, H256, U256}; +use zksync_utils::u256_to_h256; /// Configuration for the [MockServer]'s initial block. #[derive(Default, Debug, Clone)] @@ -275,8 +276,7 @@ impl TransactionResponseBuilder { "type": "0xff", "maxFeePerGas": "0x0", "maxPriorityFeePerGas": "0x0", - // TODO: can be changed back to "0x104" after zksync-era update - "chainId": 260, + "chainId": "0x104", "l1BatchNumber": "0x1", "l1BatchTxIndex": "0x0", }) @@ -358,8 +358,77 @@ impl RawTransactionsResponseBuilder { } } +#[derive(Debug, Clone)] +pub struct TransactionBuilder { + tx_hash: H256, + from_account_private_key: H256, + gas_limit: U256, + max_fee_per_gas: U256, + max_priority_fee_per_gas: U256, +} + +impl Default for TransactionBuilder { + fn default() -> Self { + Self { + tx_hash: H256::repeat_byte(0x01), + from_account_private_key: H256::random(), + gas_limit: U256::from(1_000_000), + max_fee_per_gas: U256::from(250_000_000), + max_priority_fee_per_gas: U256::from(250_000_000), + } + } +} + +impl TransactionBuilder { + pub fn new() -> Self { + Self::default() + } + + pub fn set_hash(&mut self, hash: H256) -> &mut Self { + self.tx_hash = hash; + self + } + + pub fn set_gas_limit(&mut self, gas_limit: U256) -> &mut Self { + self.gas_limit = gas_limit; + self + } + + pub fn set_max_fee_per_gas(&mut self, max_fee_per_gas: U256) -> &mut Self { + self.max_fee_per_gas = max_fee_per_gas; + self + } + + pub fn set_max_priority_fee_per_gas(&mut self, max_priority_fee_per_gas: U256) -> &mut Self { + self.max_priority_fee_per_gas = max_priority_fee_per_gas; + self + } + + pub fn build(&mut self) -> L2Tx { + let mut tx = L2Tx::new_signed( + Address::random(), + vec![], + Nonce(0), + Fee { + gas_limit: self.gas_limit, + max_fee_per_gas: self.max_fee_per_gas, + max_priority_fee_per_gas: self.max_priority_fee_per_gas, + gas_per_pubdata_limit: U256::from(20000), + }, + U256::from(1), + L2ChainId::from(260), + &self.from_account_private_key, + None, + Default::default(), + ) + .unwrap(); + tx.set_input(vec![], self.tx_hash); + tx + } +} + /// Applies a transaction with a given hash to the node and returns the block hash. -pub fn apply_tx( +pub fn apply_tx( node: &InMemoryNode, tx_hash: H256, ) -> (H256, U64) { @@ -370,35 +439,15 @@ pub fn apply_tx( .expect("failed getting current batch number"); let produced_block_hash = compute_hash(next_miniblock, tx_hash); - let private_key = H256::random(); - let from_account = PackedEthSignature::address_from_private_key(&private_key) - .expect("failed generating address"); - node.set_rich_account(from_account); - let mut tx = L2Tx::new_signed( - Address::random(), - vec![], - Nonce(0), - Fee { - gas_limit: U256::from(1_000_000), - max_fee_per_gas: U256::from(250_000_000), - max_priority_fee_per_gas: U256::from(250_000_000), - gas_per_pubdata_limit: U256::from(20000), - }, - U256::from(1), - L2ChainId::from(260), - &private_key, - None, - Default::default(), - ) - .unwrap(); - tx.set_input(vec![], tx_hash); + let tx = TransactionBuilder::new().set_hash(tx_hash).build(); + node.set_rich_account(tx.common_data.initiator_address); node.apply_txs(vec![tx]).expect("failed applying tx"); (produced_block_hash, U64::from(next_miniblock)) } /// Deploys a contract with the given bytecode. -pub fn deploy_contract( +pub fn deploy_contract( node: &InMemoryNode, tx_hash: H256, private_key: H256, @@ -525,7 +574,7 @@ impl LogBuilder { log_index: Default::default(), transaction_log_index: Default::default(), log_type: Default::default(), - removed: Default::default(), + removed: Some(false), } } } @@ -563,7 +612,7 @@ pub fn default_tx_execution_info() -> TxExecutionInfo { batch_number: Default::default(), miniblock_number: Default::default(), result: VmExecutionResultAndLogs { - result: vm::ExecutionResult::Success { output: vec![] }, + result: ExecutionResult::Success { output: vec![] }, logs: Default::default(), statistics: Default::default(), refunds: Default::default(), @@ -623,7 +672,121 @@ pub fn assert_bridge_addresses_eq( ); } +/// Represents a read-only fork source that is backed by the provided [InMemoryStorage]. +#[derive(Debug, Clone)] +pub struct ExternalStorage { + pub raw_storage: InMemoryStorage, +} + +impl ForkSource for &ExternalStorage { + fn get_storage_at( + &self, + address: H160, + idx: U256, + _block: Option, + ) -> eyre::Result { + let key = StorageKey::new(AccountTreeId::new(address), u256_to_h256(idx)); + Ok(self + .raw_storage + .state + .get(&key) + .cloned() + .unwrap_or_default()) + } + + fn get_raw_block_transactions( + &self, + _block_number: MiniblockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_bytecode_by_hash(&self, hash: H256) -> eyre::Result>> { + Ok(self.raw_storage.factory_deps.get(&hash).cloned()) + } + + fn get_transaction_by_hash( + &self, + _hash: H256, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_details( + &self, + _hash: H256, + ) -> eyre::Result> { + todo!() + } + + fn get_block_by_hash( + &self, + _hash: H256, + _full_transactions: bool, + ) -> eyre::Result>> { + todo!() + } + + fn get_block_by_number( + &self, + _block_number: zksync_types::api::BlockNumber, + _full_transactions: bool, + ) -> eyre::Result>> { + todo!() + } + + fn get_block_details( + &self, + _miniblock: MiniblockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_block_transaction_count_by_hash(&self, _block_hash: H256) -> eyre::Result> { + todo!() + } + + fn get_block_transaction_count_by_number( + &self, + _block_number: zksync_types::api::BlockNumber, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_by_block_hash_and_index( + &self, + _block_hash: H256, + _index: zksync_basic_types::web3::types::Index, + ) -> eyre::Result> { + todo!() + } + + fn get_transaction_by_block_number_and_index( + &self, + _block_number: zksync_types::api::BlockNumber, + _index: zksync_basic_types::web3::types::Index, + ) -> eyre::Result> { + todo!() + } + + fn get_bridge_contracts(&self) -> eyre::Result { + todo!() + } + + fn get_confirmed_tokens( + &self, + _from: u32, + _limit: u8, + ) -> eyre::Result> { + todo!() + } +} + mod test { + use maplit::hashmap; + use zksync_types::block::unpack_block_info; + use zksync_utils::h256_to_u256; + use super::*; use crate::http_fork_source::HttpForkSource; @@ -769,4 +932,73 @@ mod test { log.topics ); } + + #[test] + fn test_external_storage() { + let input_batch = 1; + let input_l2_block = 2; + let input_timestamp = 3; + let input_bytecode = vec![0x4]; + let batch_key = StorageKey::new( + AccountTreeId::new(zksync_types::SYSTEM_CONTEXT_ADDRESS), + zksync_types::SYSTEM_CONTEXT_BLOCK_INFO_POSITION, + ); + let l2_block_key = StorageKey::new( + AccountTreeId::new(zksync_types::SYSTEM_CONTEXT_ADDRESS), + zksync_types::SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION, + ); + + let storage = &ExternalStorage { + raw_storage: InMemoryStorage { + state: hashmap! { + batch_key => u256_to_h256(U256::from(input_batch)), + l2_block_key => u256_to_h256(pack_block_info( + input_l2_block, + input_timestamp, + )) + }, + factory_deps: hashmap! { + H256::repeat_byte(0x1) => input_bytecode.clone(), + }, + }, + }; + + let actual_batch = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(zksync_types::SYSTEM_CONTEXT_BLOCK_INFO_POSITION), + None, + ) + .map(|value| h256_to_u256(value).as_u64()) + .expect("failed getting batch number"); + assert_eq!(input_batch, actual_batch); + + let (actual_l2_block, actual_timestamp) = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(zksync_types::SYSTEM_CONTEXT_CURRENT_L2_BLOCK_INFO_POSITION), + None, + ) + .map(|value| unpack_block_info(h256_to_u256(value))) + .expect("failed getting l2 block info"); + assert_eq!(input_l2_block, actual_l2_block); + assert_eq!(input_timestamp, actual_timestamp); + + let zero_missing_value = storage + .get_storage_at( + zksync_types::SYSTEM_CONTEXT_ADDRESS, + h256_to_u256(H256::repeat_byte(0x1e)), + None, + ) + .map(|value| h256_to_u256(value).as_u64()) + .expect("failed missing value"); + assert_eq!(0, zero_missing_value); + + let actual_bytecode = storage + .get_bytecode_by_hash(H256::repeat_byte(0x1)) + .ok() + .expect("failed getting bytecode") + .expect("missing bytecode"); + assert_eq!(input_bytecode, actual_bytecode); + } } diff --git a/src/utils.rs b/src/utils.rs index 75f5ae8f..41177594 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,11 +1,13 @@ use std::collections::HashMap; +use std::convert::TryInto; use std::pin::Pin; use chrono::{DateTime, Utc}; use futures::Future; -use vm::{ExecutionResult, VmExecutionResultAndLogs}; -use vm::{HistoryDisabled, Vm}; -use zksync_basic_types::{U256, U64}; +use multivm::interface::{ExecutionResult, VmExecutionResultAndLogs, VmInterface}; +use multivm::vm_latest::HistoryDisabled; +use multivm::vm_latest::{utils::fee::derive_base_fee_and_gas_per_pubdata, Vm}; +use zksync_basic_types::{H256, U256, U64}; use zksync_state::StorageView; use zksync_state::WriteStorage; use zksync_types::api::{BlockNumber, DebugCall, DebugCallType}; @@ -17,8 +19,6 @@ use zksync_web3_decl::error::Web3Error; use crate::node::create_empty_block; use crate::{fork::ForkSource, node::InMemoryNodeInner}; -use vm::utils::fee::derive_base_fee_and_gas_per_pubdata; - use zksync_utils::{bytecode::hash_bytecode, bytes_to_be_words}; pub(crate) trait IntoBoxedFuture: Sized + Send + 'static { @@ -119,12 +119,14 @@ pub fn mine_empty_blocks( } // init vm - let system_env = - node.create_system_env(bootloader_code.clone(), vm::TxExecutionMode::VerifyExecute); + let system_env = node.create_system_env( + bootloader_code.clone(), + multivm::interface::TxExecutionMode::VerifyExecute, + ); - let mut vm = Vm::new(batch_env, system_env, storage.clone(), HistoryDisabled); + let mut vm: Vm<_, HistoryDisabled> = Vm::new(batch_env, system_env, storage.clone()); - vm.execute(vm::VmExecutionMode::Bootloader); + vm.execute(multivm::interface::VmExecutionMode::Bootloader); let bytecodes: HashMap> = vm .get_last_tx_compressed_bytecodes() @@ -153,7 +155,12 @@ pub fn mine_empty_blocks( ) } - let block = create_empty_block(block_ctx.miniblock, block_ctx.timestamp, block_ctx.batch); + let block = create_empty_block( + block_ctx.miniblock, + block_ctx.timestamp, + block_ctx.batch, + None, + ); node.block_hashes.insert(block.number.as_u64(), block.hash); node.blocks.insert(block.hash, block); @@ -453,3 +460,9 @@ mod tests { } } } + +/// Converts `h256` value as BE into the u64 +pub fn h256_to_u64(value: H256) -> u64 { + let be_u64_bytes: [u8; 8] = value[24..].try_into().unwrap(); + u64::from_be_bytes(be_u64_bytes) +} diff --git a/test_endpoints.http b/test_endpoints.http index bc130ba2..5a2d56ff 100644 --- a/test_endpoints.http +++ b/test_endpoints.http @@ -729,6 +729,28 @@ content-type: application/json POST http://localhost:8011 content-type: application/json +{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getConfirmedTokens", + "params": [0, 100] +} + +### +POST http://localhost:8011 +content-type: application/json + +{ + "jsonrpc": "2.0", + "id": "1", + "method": "zks_getAllAccountBalances", + "params": ["0x36615Cf349d7F6344891B1e7CA7C72883F5dc049"] +} + +### +POST http://localhost:8011 +content-type: application/json + { "jsonrpc": "2.0", "id": "1", @@ -768,3 +790,14 @@ content-type: application/json "method": "config_setLogging", "params": ["era_test_node=info,hyper=debug"] } + +### +POST http://localhost:8011 +content-type: application/json + +{ + "jsonrpc": "2.0", + "id": "1", + "method": "web3_clientVersion", + "params": [] +}